40template<
typename T,
typename U>
42 using type =
decltype(
static_cast<T
>(0) +
static_cast<U
>(0));
45template<
typename T,
typename U>
46using make_promote_t =
typename make_promote<T,U>::type;
48template<
typename T,
typename Ei=
void>
50 using type = uintmax_t;
54struct make_intmax<T,
std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>>> {
55 using type = uintmax_t;
59struct make_intmax<T,
std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>>> {
60 using type = intmax_t;
64using make_intmax_t =
typename make_intmax<T>::type;
67template<>
struct make_larger<signed long> {
using type =
signed long long; };
68template<>
struct make_larger<signed int> {
using type =
signed long; };
69template<>
struct make_larger<signed short> {
using type =
signed int; };
70template<>
struct make_larger<signed char> {
using type =
signed short; };
71template<>
struct make_larger<unsigned long> {
using type =
unsigned long long; };
72template<>
struct make_larger<unsigned int> {
using type =
unsigned long; };
73template<>
struct make_larger<unsigned short> {
using type =
unsigned int; };
74template<>
struct make_larger<unsigned char> {
using type =
unsigned short; };
75template<>
struct make_larger<double> {
using type =
long double; };
79using make_larger_t =
typename make_larger<T>::type;
81template<
typename To,
typename From,
typename Ei=
void>
84template<
typename To,
typename From>
85struct copy_cv<To,From,
std::enable_if_t<!std::is_const_v<From> && !std::is_volatile_v<From>>> {
86 using type = std::remove_cv_t<To>;
89template<
typename To,
typename From>
90struct copy_cv<To,From,
std::enable_if_t<!std::is_const_v<From> && std::is_volatile_v<From>>> {
91 using type = std::remove_cv_t<To>
volatile;
94template<
typename To,
typename From>
95struct copy_cv<To,From,
std::enable_if_t<std::is_const_v<From> && !std::is_volatile_v<From>>> {
96 using type = std::remove_cv_t<To>
const;
99template<
typename To,
typename From>
100struct copy_cv<To,From,
std::enable_if_t<std::is_const_v<From> && std::is_volatile_v<From>>> {
101 using type = std::remove_cv_t<To>
const volatile;
104template<
typename To,
typename From>
109 using type = std::remove_cv_t<std::remove_reference_t<T>>;
113using remove_cvref_t =
typename remove_cvref<T>::type;
117 template <
typename C>
static std::true_type test(
typename C::value_type *);
120 static const bool value = std::is_same_v<decltype(test<T>(
nullptr)),
std::true_type>;
128 template <
typename C>
static std::true_type test(
decltype(&C::add_callback) func_ptr);
131 static const bool value = std::is_same_v<decltype(test<T>(
nullptr)),
std::true_type>;
137template<
typename T,
typename Enable=
void>
144struct make_value_type<T,
std::enable_if_t<has_value_type_v<T>>> {
using type =
typename T::value_type; };
Definition type_traits.hpp:9
Definition type_traits.hpp:27
Definition type_traits.hpp:41
Definition type_traits.hpp:49
Definition type_traits.hpp:66
Definition type_traits.hpp:82
Definition type_traits.hpp:108
Definition type_traits.hpp:116
Definition type_traits.hpp:127
Definition type_traits.hpp:138