11 constexpr inline bool const_helper =
false;
14 constexpr inline bool const_helper<T const> =
true;
18concept Const = detail::const_helper<T>;
22 constexpr inline bool lvalue_reference_helper =
false;
25 constexpr inline bool lvalue_reference_helper<T&> =
true;
37 constexpr inline bool rvalue_reference_helper =
false;
40 constexpr inline bool rvalue_reference_helper<T&&> =
true;
54 constexpr inline bool pointer_helper =
false;
57 constexpr inline bool pointer_helper<T*> =
true;
61concept Pointer = detail::pointer_helper<meta::RemoveCV<T>>;
70 struct LanguageFunctionReturnHelper;
72 template<
typename R,
typename... Args>
73 struct LanguageFunctionReturnHelper<R(Args...)> : TypeConstant<R> {};
76template<concepts::LanguageFunction Fun>
89 constexpr inline bool bounded_language_array_helper =
false;
91 template<
typename T, usize N>
92 constexpr inline bool bounded_language_array_helper<T[N]> =
true;
100 constexpr inline bool unbounded_language_array_helper =
false;
103 constexpr inline bool unbounded_language_array_helper<T[]> =
true;
116 struct RemoveExtentHelper : TypeConstant<T> {};
119 struct RemoveExtentHelper<T[]> : TypeConstant<T> {};
121 template<
typename T, types::
size_t N>
122 struct RemoveExtentHelper<T[N]> : TypeConstant<T> {};
132 template<concepts::LanguageArray T>
133 struct RemoveAllExtentsHelper<T> : RemoveAllExtentsHelper<RemoveExtent<T>> {};
145template<
typename T, usize N>
148template<
typename T, types::
size_t level = 0>
151template<
typename T, usize level>
154template<
typename T, usize size>
157template<
typename T, usize size, usize level>
164 constexpr inline bool member_pointer_helper =
false;
166 template<
typename T,
typename U>
167 constexpr inline bool member_pointer_helper<T U::*> =
true;
177 struct MemberPointerValueHelper {};
179 template<
typename Value,
typename Class>
180 struct MemberPointerValueHelper<Value
Class::*> : TypeConstant<Value> {};
183template<concepts::MemberPo
inter T>
188 struct MemberPointerClassHelper {};
190 template<
typename Value,
typename Class>
191 struct MemberPointerClassHelper<Value Class::*> :
TypeConstant<Class> {};
194template<concepts::MemberPo
inter T>
216 unsigned short,
unsigned int,
unsigned long,
unsigned long long
217#ifdef DI_HAVE_128_BIT_INTEGERS
219 types::i128, types::u128
225 unsigned short,
unsigned int,
unsigned long,
unsigned long long,
226#ifdef DI_HAVE_128_BIT_INTEGERS
227 types::i128, types::u128,
229 char8_t, char16_t,
char32_t>;
266template<concepts::Enum T>
271 struct MakeSignedHelper {};
273 template<concepts::Enum T>
274 struct MakeSignedHelper<T> : MakeSignedHelper<UnderlyingType<T>> {};
276 template<concepts::SignedIntegral T>
277 struct MakeSignedHelper<T> : TypeConstant<T> {};
280 struct MakeSignedHelper<unsigned char> : TypeConstant<char> {};
283 struct MakeSignedHelper<unsigned short> : TypeConstant<short> {};
286 struct MakeSignedHelper<unsigned int> : TypeConstant<int> {};
289 struct MakeSignedHelper<unsigned long> : TypeConstant<long> {};
292 struct MakeSignedHelper<unsigned long long> : TypeConstant<long long> {};
294#ifdef DI_HAVE_128_BIT_INTEGERS
296 struct MakeSignedHelper<types::u128> : TypeConstant<types::i128> {};
300 struct MakeSignedHelper<char8_t> : TypeConstant<types::i8> {};
303 struct MakeSignedHelper<char16_t> : TypeConstant<types::i16> {};
306 struct MakeSignedHelper<char32_t> : TypeConstant<types::i32> {};
309 struct MakeSignedHelper<float> : TypeConstant<float> {};
312 struct MakeSignedHelper<double> : TypeConstant<double> {};
320 struct MakeUnsignedHelper {};
322 template<concepts::Enum T>
323 struct MakeUnsignedHelper<T> : MakeUnsignedHelper<UnderlyingType<T>> {};
325 template<concepts::Un
signedIntegral T>
329 struct MakeUnsignedHelper<char> :
TypeConstant<unsigned char> {};
332 struct MakeUnsignedHelper<signed char> :
TypeConstant<unsigned char> {};
335 struct MakeUnsignedHelper<short> :
TypeConstant<unsigned short> {};
338 struct MakeUnsignedHelper<int> :
TypeConstant<unsigned int> {};
341 struct MakeUnsignedHelper<long> :
TypeConstant<unsigned long> {};
344 struct MakeUnsignedHelper<long long> :
TypeConstant<unsigned long long> {};
346#ifdef DI_HAVE_128_BIT_INTEGERS
352 struct MakeUnsignedHelper<char8_t> :
TypeConstant<types::u8> {};
355 struct MakeUnsignedHelper<char16_t> :
TypeConstant<types::u16> {};
358 struct MakeUnsignedHelper<char32_t> :
TypeConstant<types::u32> {};
372template<
typename T,
typename U>
430 template<
typename T,
typename U>
433 template<
typename T,
typename U>
434 struct LikeHelper<T const, U> :
TypeConstant<U const> {};
436 template<
typename T,
typename U>
437 struct LikeHelper<T volatile, U> :
TypeConstant<U volatile> {};
439 template<
typename T,
typename U>
440 struct LikeHelper<T const volatile, U> :
TypeConstant<U const volatile> {};
442 template<
typename T,
typename U>
445 template<
typename T,
typename U>
448 template<
typename T,
typename U>
451 template<
typename T,
typename U>
454 template<
typename T,
typename U>
457 template<
typename T,
typename U>
460 template<
typename T,
typename U>
463 template<
typename T,
typename U>
467template<
typename T,
typename U>
495 struct RemoveFunctionQualifiersHelper;
497 template<
typename R,
typename... Args>
498 struct RemoveFunctionQualifiersHelper<R(Args...)> :
TypeConstant<R(Args...)> {};
500 template<
typename R,
typename... Args>
501 struct RemoveFunctionQualifiersHelper<R(Args...) const> :
TypeConstant<R(Args...)> {};
503 template<
typename R,
typename... Args>
504 struct RemoveFunctionQualifiersHelper<R(Args...) volatile> :
TypeConstant<R(Args...)> {};
506 template<
typename R,
typename... Args>
507 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile> :
TypeConstant<R(Args...)> {};
509 template<
typename R,
typename... Args>
510 struct RemoveFunctionQualifiersHelper<R(Args...) &> :
TypeConstant<R(Args...)> {};
512 template<
typename R,
typename... Args>
513 struct RemoveFunctionQualifiersHelper<R(Args...) const&> :
TypeConstant<R(Args...)> {};
515 template<
typename R,
typename... Args>
516 struct RemoveFunctionQualifiersHelper<R(Args...) volatile&> :
TypeConstant<R(Args...)> {};
518 template<
typename R,
typename... Args>
519 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile&> :
TypeConstant<R(Args...)> {};
521 template<
typename R,
typename... Args>
522 struct RemoveFunctionQualifiersHelper<R(Args...) &&> :
TypeConstant<R(Args...)> {};
524 template<
typename R,
typename... Args>
525 struct RemoveFunctionQualifiersHelper<R(Args...) const&&> :
TypeConstant<R(Args...)> {};
527 template<
typename R,
typename... Args>
528 struct RemoveFunctionQualifiersHelper<R(Args...) volatile&&> :
TypeConstant<R(Args...)> {};
530 template<
typename R,
typename... Args>
531 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile&&> :
TypeConstant<R(Args...)> {};
533 template<
typename R,
typename... Args>
534 struct RemoveFunctionQualifiersHelper<R(Args...) noexcept> :
TypeConstant<R(Args...)> {};
536 template<
typename R,
typename... Args>
537 struct RemoveFunctionQualifiersHelper<R(Args...) const noexcept> :
TypeConstant<R(Args...)> {};
539 template<
typename R,
typename... Args>
540 struct RemoveFunctionQualifiersHelper<R(Args...) volatile noexcept> :
TypeConstant<R(Args...)> {};
542 template<
typename R,
typename... Args>
543 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile noexcept> :
TypeConstant<R(Args...)> {};
545 template<
typename R,
typename... Args>
546 struct RemoveFunctionQualifiersHelper<R(Args...) &
noexcept> :
TypeConstant<R(Args...)> {};
548 template<
typename R,
typename... Args>
549 struct RemoveFunctionQualifiersHelper<R(Args...) const &
noexcept> :
TypeConstant<R(Args...)> {};
551 template<
typename R,
typename... Args>
552 struct RemoveFunctionQualifiersHelper<R(Args...) volatile &
noexcept> :
TypeConstant<R(Args...)> {};
554 template<
typename R,
typename... Args>
555 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile &
noexcept> :
TypeConstant<R(Args...)> {};
557 template<
typename R,
typename... Args>
558 struct RemoveFunctionQualifiersHelper<R(Args...) &&
noexcept> :
TypeConstant<R(Args...)> {};
560 template<
typename R,
typename... Args>
561 struct RemoveFunctionQualifiersHelper<R(Args...) const &&
noexcept> :
TypeConstant<R(Args...)> {};
563 template<
typename R,
typename... Args>
564 struct RemoveFunctionQualifiersHelper<R(Args...) volatile &&
noexcept> :
TypeConstant<R(Args...)> {};
566 template<
typename R,
typename... Args>
567 struct RemoveFunctionQualifiersHelper<R(Args...) const volatile &&
noexcept> :
TypeConstant<R(Args...)> {};
Definition language.h:212
Definition language.h:235
Definition language.h:373
Definition language.h:253
Definition language.h:259
Definition language.h:232
Definition language.h:209
Definition language.h:215
Definition language.h:262
Definition language.h:224
Definition language.h:110
Definition language.h:200
Definition language.h:203
Definition language.h:171
Definition language.h:206
Definition language.h:370
Definition language.h:367
Definition language.h:241
Definition language.h:247
Definition language.h:238
Definition language.h:107
Definition language.h:256
Definition language.h:376
Definition language.h:244
Definition language.h:250
Definition any_storable.h:9
std::nullptr_t nullptr_t
Definition nullptr_t.h:12
constexpr auto size
Definition size.h:62