ctrl-utils
type_traits.h
1 
10 #include <type_traits>
11 
12 #if __cplusplus < 201703L
13 
14 #ifndef CTRL_UTILS_TYPE_TRAITS_H_
15 #define CTRL_UTILS_TYPE_TRAITS_H_
16 
17 namespace std {
18 
19 template<class...> struct conjunction : std::true_type { };
20 template<class B1> struct conjunction<B1> : B1 { };
21 template<class B1, class... Bn>
22 struct conjunction<B1, Bn...>
23  : std::conditional_t<bool(B1::value), conjunction<Bn...>, B1> {};
24 
25 template<class... B>
26 constexpr bool conjunction_v = conjunction<B...>::value;
27 
28 template<class B1, class B2>
29 constexpr bool is_convertible_v = is_convertible<B1, B2>::value;
30 
31 } // namespace std
32 
33 #endif // CTRL_UTILS_TYPE_TRAITS_H_
34 
35 #endif // __cplusplus
Definition: chrono.h:15
Definition: type_traits.h:20
Definition: type_traits.h:19