51template<>
struct make_string<char8_t> {
using type = std::u8string; };
72using make_string_view_t =
typename make_string_view<T>::type;
74template<
typename T,
typename U>
76 using type =
decltype(
static_cast<T
>(0) +
static_cast<U
>(0));
79template<
typename T,
typename U>
80using make_promote_t =
typename make_promote<T,U>::type;
82template<
typename T,
typename Ei=
void>
84 using type = uintmax_t;
88struct make_intmax<T,
std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>>> {
89 using type = uintmax_t;
93struct make_intmax<T,
std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>>> {
94 using type = intmax_t;
98using make_intmax_t =
typename make_intmax<T>::type;
103template<>
struct make_larger<signed long> {
using type =
signed long long; };
104template<>
struct make_larger<signed int> {
using type =
signed long; };
105template<>
struct make_larger<signed short> {
using type =
signed int; };
106template<>
struct make_larger<signed char> {
using type =
signed short; };
107template<>
struct make_larger<unsigned long> {
using type =
unsigned long long; };
108template<>
struct make_larger<unsigned int> {
using type =
unsigned long; };
109template<>
struct make_larger<unsigned short> {
using type =
unsigned int; };
110template<>
struct make_larger<unsigned char> {
using type =
unsigned short; };
111template<>
struct make_larger<double> {
using type =
long double; };
117using make_larger_t =
typename make_larger<T>::type;
121template<
typename To,
typename From,
typename Ei=
void>
124template<
typename To,
typename From>
125struct copy_cv<To,From,
std::enable_if_t<!std::is_const_v<From> && !std::is_volatile_v<From>>> {
126 using type = std::remove_cv_t<To>;
129template<
typename To,
typename From>
130struct copy_cv<To,From,
std::enable_if_t<!std::is_const_v<From> && std::is_volatile_v<From>>> {
131 using type = std::remove_cv_t<To>
volatile;
134template<
typename To,
typename From>
135struct copy_cv<To,From,
std::enable_if_t<std::is_const_v<From> && !std::is_volatile_v<From>>> {
136 using type = std::remove_cv_t<To>
const;
139template<
typename To,
typename From>
140struct copy_cv<To,From,
std::enable_if_t<std::is_const_v<From> && std::is_volatile_v<From>>> {
141 using type = std::remove_cv_t<To>
const volatile;
146template<
typename To,
typename From>
151 template <
typename C>
static std::true_type test(
typename C::value_type *);
154 static const bool value = std::is_same_v<decltype(test<T>(
nullptr)),
std::true_type>;
162 template <
typename C>
static std::true_type test(
decltype(&C::add_callback) func_ptr);
165 static const bool value = std::is_same_v<decltype(test<T>(
nullptr)),
std::true_type>;
171template<
typename BaseType,
typename DerivedType>
174template<
typename BaseType,
typename DerivedType>
177template<
typename DerivedType,
typename BaseType>
180template<
typename DerivedType,
typename BaseType>
183template<
typename DerivedType,
typename BaseType>
186template<
typename DerivedType,
typename BaseType>
189template<
typename T1,
typename T2>
190constexpr bool is_different_v = !std::is_same_v<T1,T2>;
193template<
typename First,
typename Second>
198template<
typename First,
typename Second>
Definition type_traits.hpp:15
Definition type_traits.hpp:33
type-trait to convert a character to a string type.
Definition type_traits.hpp:48
type-trait to convert a character to a string_view type.
Definition type_traits.hpp:62
Definition type_traits.hpp:75
Definition type_traits.hpp:83
Type-trait to increase the size of an integral type.
Definition type_traits.hpp:102
Type-trait to copy const volitile qualifiers from one type to another.
Definition type_traits.hpp:122
Definition type_traits.hpp:150
Definition type_traits.hpp:161
Definition type_traits.hpp:172
Definition type_traits.hpp:178
Definition type_traits.hpp:184
Definition type_traits.hpp:194