1 /************************************************************************************ 2 * * 3 * Copyright (c) 2014 - 2018 Axel Menzel <info@rttr.org> * 4 * * 5 * This file is part of RTTR (Run Time Type Reflection) * 6 * License: MIT License * 7 * * 8 * Permission is hereby granted, free of charge, to any person obtaining * 9 * a copy of this software and associated documentation files (the "Software"), * 10 * to deal in the Software without restriction, including without limitation * 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense, * 12 * and/or sell copies of the Software, and to permit persons to whom the * 13 * Software is furnished to do so, subject to the following conditions: * 14 * * 15 * The above copyright notice and this permission notice shall be included in * 16 * all copies or substantial portions of the Software. * 17 * * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * 24 * SOFTWARE. * 25 * * 26 *************************************************************************************/ 27 28 #ifndef RTTR_STD_TYPE_TRAITS_H_ 29 #define RTTR_STD_TYPE_TRAITS_H_ 30 31 #include "rttr/detail/base/core_prerequisites.h" 32 33 #include <type_traits> 34 35 namespace rttr 36 { 37 38 namespace detail 39 { 40 41 ///////////////////////////////////////////////////////////////////////////////////// 42 ///////////////////////////////////////////////////////////////////////////////////// 43 ///////////////////////////////////////////////////////////////////////////////////// 44 // shortcuts to avoid writing typename my_traits<T>::type over and over again 45 // C++14 has support for this, but we support at the moment C++11 46 47 template< bool B, class T, class F > 48 using conditional_t = typename std::conditional<B, T, F>::type; 49 50 template<typename T> 51 using remove_cv_t = typename std::remove_cv<T>::type; 52 53 template<typename T> 54 using remove_volatile_t = typename std::remove_volatile<T>::type; 55 56 template<typename T> 57 using remove_const_t = typename std::remove_const<T>::type; 58 59 template<typename T> 60 using remove_pointer_t = typename std::remove_pointer<T>::type; 61 62 template<typename T> 63 using remove_reference_t = typename std::remove_reference<T>::type; 64 65 template<typename T> 66 using add_pointer_t = typename std::add_pointer<T>::type; 67 68 template< bool B, class T = void > 69 using enable_if_t = typename std::enable_if<B, T>::type; 70 71 template<typename T> 72 using decay_t = typename std::decay<T>::type; 73 74 template<typename T> 75 using add_const_t = typename std::add_const<T>::type; 76 77 template<typename T> 78 using add_lvalue_reference_t = typename std::add_lvalue_reference<T>::type; 79 80 ///////////////////////////////////////////////////////////////////////////////////// 81 82 } // end namespace detail 83 } // end namespace rttr 84 85 #endif // RTTR_STD_TYPE_TRAITS_H_ 86