/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #ifndef CRYINCLUDE_CRYCOMMON_METAUTILS_H #define CRYINCLUDE_CRYCOMMON_METAUTILS_H #pragma once namespace metautils { // select template struct select; template struct select { typedef Ty1 type; }; template struct select { typedef Ty2 type; }; // is_same // Identifies whether types Ty1 and Ty2 are the same including const & volatile. template struct is_same; template struct is_same { enum { value = true, }; }; template struct is_same { enum { value = false, }; }; // remove_const // Removes top level const qualifier. template struct remove_const { typedef Ty type; }; template struct remove_const { typedef Ty type; }; template struct remove_const { typedef Ty type[]; }; template struct remove_const { typedef Ty type[N]; }; // is_const // Determines whether type Ty is const qualified. template struct is_const { enum { value = false }; }; template struct is_const { enum { value = true }; }; template struct is_const { enum { value = false }; }; template struct is_const { enum { value = true }; }; template struct is_const { enum { value = false }; }; }; #endif // CRYINCLUDE_CRYCOMMON_METAUTILS_H