1#ifndef SIMPLE_TYPE_TRAITS_HPP
2#define SIMPLE_TYPE_TRAITS_HPP
24 static constexpr bool value =
false;
29template <>
struct is_pod<char> {
static constexpr bool value =
true; };
30template <>
struct is_pod<unsigned char> {
static constexpr bool value =
true; };
31template <>
struct is_pod<short> {
static constexpr bool value =
true; };
32template <>
struct is_pod<unsigned short> {
static constexpr bool value =
true; };
33template <>
struct is_pod<int> {
static constexpr bool value =
true; };
34template <>
struct is_pod<unsigned int> {
static constexpr bool value =
true; };
35template <>
struct is_pod<long> {
static constexpr bool value =
true; };
36template <>
struct is_pod<unsigned long> {
static constexpr bool value =
true; };
37template <>
struct is_pod<float> {
static constexpr bool value =
true; };
38template <>
struct is_pod<double> {
static constexpr bool value =
true; };
56 static constexpr bool value =
false;
75template <
typename A,
typename B>
78 static constexpr bool value =
false;
85 static constexpr bool value =
true;
90template <
typename A,
typename B>
191 return static_cast<T &&
>(t);
202 return static_cast<T &&
>(t);
217template <
typename Base,
typename Derived>
220#if defined(__has_builtin) && __has_builtin(__is_base_of)
221 static constexpr bool value = __is_base_of(Base, Derived);
222#elif defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER)
223 static constexpr bool value = __is_base_of(Base, Derived);
231template <
typename Base,
typename Derived>
245 template <
typename Base,
typename Derived>
249 static constexpr bool check(Base *) {
return true; }
250 static constexpr bool check(...) {
return false; }
253 static constexpr bool value = check(
static_cast<Derived *
>(
nullptr));
269 static constexpr bool value = __has_trivial_destructor(T);
287 static constexpr bool value = __is_nothrow_constructible(T, T &&);
301#if defined(__STDC_HOSTED__) && __STDC_HOSTED__ == 0
302inline void *
operator new(
decltype(
sizeof(0)),
void *ptr)
noexcept {
return ptr; }
constexpr bool is_base_of_v
Helper variable template for is_base_of.
Definition simple_type_traits.h:232
constexpr bool is_pod_v
Helper variable template for is_pod.
Definition simple_type_traits.h:44
constexpr bool is_nothrow_move_constructible_v
Helper variable template for is_nothrow_move_constructible.
Definition simple_type_traits.h:292
typename remove_cvref< T >::type remove_cvref_t
Alias template for remove_cvref.
Definition simple_type_traits.h:169
constexpr remove_reference_t< T > && move(T &&t) noexcept
Cast to rvalue reference (replacement for std::move).
Definition simple_type_traits.h:178
typename remove_reference< T >::type remove_reference_t
Alias template for remove_reference.
Definition simple_type_traits.h:119
constexpr bool is_trivially_destructible_v
Helper variable template for is_trivially_destructible.
Definition simple_type_traits.h:274
constexpr T && forward(remove_reference_t< T > &t) noexcept
Perfect-forward an lvalue (replacement for std::forward).
Definition simple_type_traits.h:189
constexpr bool is_floating_point_v
Helper variable template for is_floating_point.
Definition simple_type_traits.h:68
constexpr bool is_same_v
Helper variable template for is_same.
Definition simple_type_traits.h:91
typename remove_cv< T >::type remove_cv_t
Alias template for remove_cv.
Definition simple_type_traits.h:153
Fallback implementation for is_base_of using pointer conversion.
Definition simple_type_traits.h:247
static constexpr bool value
Definition simple_type_traits.h:253
Compile-time inheritance check (replacement for std::is_base_of).
Definition simple_type_traits.h:219
static constexpr bool value
Definition simple_type_traits.h:226
Compile-time floating-point type check.
Definition simple_type_traits.h:55
static constexpr bool value
Definition simple_type_traits.h:56
Compile-time check for nothrow move constructibility.
Definition simple_type_traits.h:286
static constexpr bool value
Definition simple_type_traits.h:287
Compile-time check for Plain Old Data types.
Definition simple_type_traits.h:23
static constexpr bool value
Definition simple_type_traits.h:24
Compile-time type equality check (replacement for std::is_same).
Definition simple_type_traits.h:77
static constexpr bool value
Definition simple_type_traits.h:78
Compile-time check for trivially destructible types.
Definition simple_type_traits.h:268
static constexpr bool value
Definition simple_type_traits.h:269
Strip const/volatile qualifiers from a type.
Definition simple_type_traits.h:127
T type
Definition simple_type_traits.h:128
Strip cv-qualifiers and references in one step.
Definition simple_type_traits.h:163
remove_cv_t< remove_reference_t< T > > type
Definition simple_type_traits.h:164
Strip lvalue/rvalue reference qualifiers from a type.
Definition simple_type_traits.h:99
T type
Definition simple_type_traits.h:100