18 #ifndef COMMON_TRAITS_H 19 #define COMMON_TRAITS_H 21 #include <type_traits> 24 #if !defined(__has_feature) 25 # define __has_feature(x) 0 31 #if (__has_feature(is_trivially_copyable) \ 32 || (defined __GNUC__ && __GNUC__ >= 5)) 33 # define HAVE_IS_TRIVIALLY_COPYABLE 1 41 template<
typename... Ts>
44 template<
typename... Ts>
50 template<
typename Predicate>
51 struct Not :
public std::integral_constant<bool, !Predicate::value>
58 struct Or<> :
public std::false_type
65 template<
typename B1,
typename B2>
70 template<
typename B1,
typename B2,
typename B3,
typename... Bn>
71 struct Or<B1, B2, B3, Bn...>
72 :
public std::conditional<B1::value, B1, Or<B2, B3, Bn...>>
::type 79 struct And<> :
public std::true_type
86 template<
typename B1,
typename B2>
91 template<
typename B1,
typename B2,
typename B3,
typename... Bn>
92 struct And<B1, B2, B3, Bn...>
93 :
public std::conditional<B1::value, And<B2, B3, Bn...>, B1>
::type 97 template<
typename Condition>
typename std::enable_if< Condition::value, void >::type Requires
typename make_void< Ts... >::type void_t