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