19 #ifndef INCLUDE_RCF_TYPETRAITS_HPP 20 #define INCLUDE_RCF_TYPETRAITS_HPP 22 #include <type_traits> 26 typedef std::true_type TrueType;
27 typedef std::false_type FalseType;
29 template<
int N>
using Int = std::integral_constant<int, N>;
30 template<
bool B>
using Bool = std::integral_constant<bool, B>;
31 template<
typename C,
typename T1,
typename T2>
using If = std::conditional<C::value, T1, T2>;
36 template<
typename T1,
typename T2>
class AndImpl;
37 template<>
class AndImpl<TrueType, TrueType> :
public TrueType {};
38 template<>
class AndImpl<TrueType, FalseType> :
public FalseType {};
39 template<>
class AndImpl<FalseType, TrueType> :
public FalseType {};
40 template<>
class AndImpl<FalseType, FalseType> :
public FalseType {};
41 template<
typename T1,
typename T2>
class And :
public AndImpl<typename T1::type, typename T2::type> {};
46 template<
typename T1,
typename T2>
class OrImpl;
47 template<>
class OrImpl<TrueType, TrueType> :
public TrueType {};
48 template<>
class OrImpl<TrueType, FalseType> :
public FalseType {};
49 template<>
class OrImpl<FalseType, TrueType> :
public FalseType {};
50 template<>
class OrImpl<FalseType, FalseType> :
public FalseType {};
51 template<
typename T1,
typename T2>
class Or :
public OrImpl<typename T1::type, typename T2::type> {};
56 template<
typename T1>
class NotImpl;
57 template<>
class NotImpl<TrueType> :
public FalseType {};
58 template<>
class NotImpl<FalseType> :
public TrueType {};
59 template<
typename T1>
class Not :
public NotImpl<typename T1::type> {};
61 template<
typename T>
using IsFundamental = std::is_fundamental<T>;
62 template<
typename T>
using IsConst = std::is_const<T>;
63 template<
typename T>
using IsPointer = std::is_pointer<T>;
64 template<
typename T>
using IsReference = std::is_reference<T>;
65 template<
typename T>
using RemovePointer = std::remove_pointer<T>;
66 template<
typename T>
using RemoveReference = std::remove_reference<T>;
67 template<
typename T>
using RemoveCv = std::remove_cv<T>;
69 template<
typename T>
struct Out {};
71 template<
typename T>
struct RemoveOut {
typedef T type; };
72 template<
typename T>
struct RemoveOut< Out<T> > {
typedef T type; };
74 template<
typename T>
struct IsOut :
public RCF::FalseType {};
75 template<
typename T>
struct IsOut< Out<T> > {
76 typedef TrueType type;
77 enum { value = type::value };
82 #endif // ! INCLUDE_RCF_TYPETRAITS_HPP Definition: AmiIoHandler.hpp:24