tesseract++ 0.0.1
N-dimensional tensor library for embedded systems
Loading...
Searching...
No Matches
simple_type_traits.h
Go to the documentation of this file.
1#ifndef SIMPLE_TYPE_TRAITS_HPP
2#define SIMPLE_TYPE_TRAITS_HPP
3
21template <typename T>
22struct is_pod
23{
24 static constexpr bool value = false;
25};
26
27// clang-format off
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; };
40// clang-format on
41
43template <typename T>
44inline constexpr bool is_pod_v = is_pod<T>::value;
45
53template <typename T>
55{
56 static constexpr bool value = false;
57};
58
59// clang-format off
61template <> struct is_floating_point<float> { static constexpr bool value = true; };
62template <> struct is_floating_point<double> { static constexpr bool value = true; };
64// clang-format on
65
67template <typename T>
69
75template <typename A, typename B>
76struct is_same
77{
78 static constexpr bool value = false;
79};
80
82template <typename T>
83struct is_same<T, T>
84{
85 static constexpr bool value = true;
86};
88
90template <typename A, typename B>
91inline constexpr bool is_same_v = is_same<A, B>::value;
92
97template <typename T>
99{
100 using type = T;
101};
102
104template <typename T>
105struct remove_reference<T &>
106{
107 using type = T;
108};
109
110template <typename T>
111struct remove_reference<T &&>
112{
113 using type = T;
114};
116
118template <typename T>
120
125template <typename T>
127{
128 using type = T;
129};
130
132template <typename T>
133struct remove_cv<const T>
134{
135 using type = T;
136};
137
138template <typename T>
139struct remove_cv<volatile T>
140{
141 using type = T;
142};
143
144template <typename T>
145struct remove_cv<const volatile T>
146{
147 using type = T;
148};
150
152template <typename T>
154
161template <typename T>
166
168template <typename T>
170
177template <typename T>
178[[nodiscard]] constexpr remove_reference_t<T> &&move(T &&t) noexcept
179{
180 return static_cast<remove_reference_t<T> &&>(t);
181}
182
188template <typename T>
189constexpr T &&forward(remove_reference_t<T> &t) noexcept
190{
191 return static_cast<T &&>(t);
192}
193
199template <typename T>
200constexpr T &&forward(remove_reference_t<T> &&t) noexcept
201{
202 return static_cast<T &&>(t);
203}
204
217template <typename Base, typename Derived>
219{
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);
224#else
225 // Fallback implementation (not fully standards-compliant)
227#endif
228};
229
231template <typename Base, typename Derived>
233
234namespace detail
235{
236
245 template <typename Base, typename Derived>
247 {
248 private:
249 static constexpr bool check(Base *) { return true; }
250 static constexpr bool check(...) { return false; }
251
252 public:
253 static constexpr bool value = check(static_cast<Derived *>(nullptr));
254 };
255
256} // namespace detail
257
266template <typename T>
268{
269 static constexpr bool value = __has_trivial_destructor(T);
270};
271
273template <typename T>
275
284template <typename T>
286{
287 static constexpr bool value = __is_nothrow_constructible(T, T &&);
288};
289
291template <typename T>
293
301#if defined(__STDC_HOSTED__) && __STDC_HOSTED__ == 0
302inline void *operator new(decltype(sizeof(0)), void *ptr) noexcept { return ptr; }
303#else
304#include <new>
305#endif
306
307#endif // SIMPLE_TYPE_TRAITS_HPP
Definition BaseExpr.h:4
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