31#ifndef FENNEC_LANG_TYPE_TRAITS_H
32#define FENNEC_LANG_TYPE_TRAITS_H
426#include <fennec/lang/detail/_type_traits.h>
431constexpr inline bool is_constant_evaluated() noexcept {
448 : detail::_is_void<remove_cvref_t<T>>{};
465 : detail::_is_null_pointer<remove_cvref_t<T>>{};
482 : detail::_is_bool<remove_cvref_t<T>>{};
499 : detail::_is_integral<remove_cvref_t<T>> {};
516 : detail::_is_floating_point<remove_cvref_t<T>>{};
527#ifdef FENNEC_BUILTIN_IS_ARRAY
532template<
typename T>
struct is_array
533 : bool_constant<FENNEC_BUILTIN_IS_ARRAY(T)> {};
544template<
typename T,
size_t N>
struct is_array<T[N]>
548template<
typename T>
struct is_array<T[]>
628 : detail::_is_pointer<remove_cvref_t<T>>{};
645 : detail::_is_lvalue_reference<T>{};
662 : detail::_is_rvalue_reference<T>{};
679 :
bool_constant<FENNEC_BUILTIN_IS_MEMBER_FUNCTION_POINTER(T)> {};
696 :
bool_constant<FENNEC_BUILTIN_IS_MEMBER_OBJECT_POINTER(T)> {};
713 :
bool_constant<is_integral_v<T> or is_floating_point_v<T>>{};
727 :
bool_constant<is_arithmetic_v<T> or is_void_v<T> or is_null_pointer_v<T>>{};
744 :
bool_constant<is_arithmetic_v<T> or is_enum_v<T> or is_pointer_v<T>>{};
793 : detail::_is_reference<T>{};
875 :
bool_constant<FENNEC_BUILTIN_HAS_UNIQUE_OBJECT_REPRESENTATIONS(remove_cv_t<T>)> {};
939template<
typename T>
struct is_complete : detail::_is_complete<T>::type {};
989 : detail::_is_signed<remove_cvref_t<T>> {};
1007 : detail::_is_unsigned<remove_cvref_t<T>> {};
1044 is_class_v<Base> and is_class_v<Derived> and decltype(detail::_is_base_of<Base, Derived>(0))::value
1064 :
bool_constant<FENNEC_BUILTIN_IS_CONVERTIBLE(FromT, ToT)> {};
1082 :
bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, ArgsT...)> {};
1096 :
bool_constant<FENNEC_BUILTIN_IS_TRIVIALLY_CONSTRUCTIBLE(ClassT)> {};
1110 :
bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT,)> {};
1124 :
bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, add_lvalue_reference_t<const ClassT>)> {};
1138 :
bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, add_rvalue_reference_t<ClassT>)> {};
1154 :
bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(ClassAT, ClassBT)> {};
1168 :
bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(add_lvalue_reference_t<ClassT>, add_lvalue_reference_t<const ClassT>)> {};
1182 :
bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(add_lvalue_reference_t<ClassT>, add_rvalue_reference_t<ClassT>)> {};
1196 : detail::_is_destructible<ClassT>::type {};
1210 :
bool_constant<FENNEC_BUILTIN_IS_TRIVIALLY_DESTRUCTIBLE(ClassT)> {};
1224 : detail::_is_nothrow_destructible<ClassT>::type {};
1239template<
typename T>
struct is_iterable : decltype(detail::_is_iterable<T>(0)) {};
1255template<
typename T>
struct is_indexable : decltype(detail::_is_indexable<T>(0)) {};
1271template<
typename T>
struct is_mappable : decltype(detail::_is_mappable<T>(0)) {};
metaprogramming boolean constant
Definition constants.h:95
metaprogramming false constant
Definition constants.h:107
Check if type T has unique object representations.
Definition type_traits.h:875
Check if type T is abstract.
Definition type_traits.h:923
Check if type T is aggregate.
Definition type_traits.h:971
Check if T is an arithmetic type.
Definition type_traits.h:713
Check if T is of an array type.
Definition type_traits.h:541
Check if ClassT can be constructed with ArgsT, i.e. ClassT(ArgsT...). This may be read as "is `ClassT...
Definition type_traits.h:1154
Check if Derived has a base type of Base
Definition type_traits.h:1045
Check if T is of type bool.
Definition type_traits.h:482
Check if T is a class.
Definition type_traits.h:596
Check if type T is complete.
Definition type_traits.h:939
Check if T is a object compound type.
Definition type_traits.h:776
Check if ClassT can be constructed with ArgsT, i.e. ClassT(ArgsT...). This may be read as "is `ClassT...
Definition type_traits.h:1082
Check if type T0 can be converted T1
Definition type_traits.h:1064
Check if ClassT is copy assignable.
Definition type_traits.h:1168
Check if ClassT is copy constructible.
Definition type_traits.h:1124
Check if ClassT is default constructible.
Definition type_traits.h:1110
Check if ClassT is destructible.
Definition type_traits.h:1196
Check if type T is empty.
Definition type_traits.h:891
Check if T is an enum.
Definition type_traits.h:566
Check if type T is final.
Definition type_traits.h:955
Check if T is of a floating point type.
Definition type_traits.h:516
Check if T is a class.
Definition type_traits.h:611
Check if T is a fundamental type, i.e. arithmetic, void, or nullptr_t.
Definition type_traits.h:727
Check if type T is indexable.
Definition type_traits.h:1255
Check if T is of an integral.
Definition type_traits.h:499
Check if type T is iterable.
Definition type_traits.h:1239
Check if T is of a floating point type.
Definition type_traits.h:645
Check if type T is mappable.
Definition type_traits.h:1271
Check if T is a pointer to a member function.
Definition type_traits.h:679
Check if T is a pointer to a member object.
Definition type_traits.h:696
Check if T is a pointer to a member.
Definition type_traits.h:810
Check if ClassT is move assignable.
Definition type_traits.h:1182
Check if ClassT is move constructible.
Definition type_traits.h:1138
Check if ClassT is nothrow destructible.
Definition type_traits.h:1224
Check if T is of type nullptr_t.
Definition type_traits.h:465
Check if T is an object.
Definition type_traits.h:760
Check if T is of a pointer type.
Definition type_traits.h:628
Check if type T is polymorphic.
Definition type_traits.h:907
Check if T is of a floating point type.
Definition type_traits.h:793
Check if T is of a floating point type.
Definition type_traits.h:662
Check if the two types are identical.
Definition type_traits.h:1023
Check if T is an arithmetic type.
Definition type_traits.h:744
Check if T is of a signed integral.
Definition type_traits.h:989
Check if type T is standard_layout.
Definition type_traits.h:858
Check if type T is trivial.
Definition type_traits.h:826
Check if ClassT is trivially constructible.
Definition type_traits.h:1096
Check if type T is trivially_copyable.
Definition type_traits.h:842
Check if ClassT is trivially destructible.
Definition type_traits.h:1210
Check if T is a union.
Definition type_traits.h:581
Check if T is of an unsigned integral.
Definition type_traits.h:1007
Check if T is of type void.
Definition type_traits.h:448
metaprogramming true constant
Definition constants.h:101
constexpr bool_t is_assignable_v
Shorthand for is_constructible<ClassT, ArgsT...>::value
Definition type_traits.h:1158
constexpr bool_t is_rvalue_reference_v
Shorthand for is_floating_point<T>::value
Definition type_traits.h:667
constexpr bool_t is_array_v
Shorthand for is_array<T>::value
Definition type_traits.h:556
constexpr bool_t is_move_assignable_v
Shorthand for is_move_assignable<ClassT>::value
Definition type_traits.h:1186
constexpr bool_t is_complete_v
Shorthand for is_complete<T>::value
Definition type_traits.h:944
constexpr bool_t is_copy_constructible_v
Shorthand for is_copy_constructible<ClassT>::value
Definition type_traits.h:1128
constexpr bool_t is_aggregate_v
Shorthand for is_aggregate<T>::value
Definition type_traits.h:976
constexpr bool_t is_final_v
Shorthand for is_final<T>::value
Definition type_traits.h:960
constexpr bool_t is_polymorphic_v
Shorthand for is_polymorphic<T>::value
Definition type_traits.h:912
constexpr size_t is_class_v
Check if T is a class.
Definition type_traits.h:601
constexpr bool_t is_default_constructible_v
Shorthand for is_default_constructible<ClassT>::value
Definition type_traits.h:1114
constexpr bool_t is_fundamental_v
Shorthand for is_fundamental<T>::value
Definition type_traits.h:732
constexpr bool_t is_trivial_v
Shorthand for is_trivial<T>::value
Definition type_traits.h:831
constexpr bool_t is_object_v
Shorthand for is_object<T>::value
Definition type_traits.h:765
constexpr size_t is_union_v
Check if T is a class.
Definition type_traits.h:586
constexpr bool_t is_member_function_pointer_v
Shorthand for is_member_function_pointer<T>::value
Definition type_traits.h:684
constexpr bool_t is_member_pointer_v
Shorthand for is_member_function_pointer<T>::value
Definition type_traits.h:815
constexpr bool_t is_lvalue_reference_v
Shorthand for is_floating_point<T>::value
Definition type_traits.h:650
constexpr bool_t is_convertible_v
Shorthand for can_convert<TypeT0, TypeT1>::value
Definition type_traits.h:1070
constexpr bool_t is_trivially_destructible_v
Shorthand for is_trivially_destructible<ClassT, ArgsT...>::value
Definition type_traits.h:1214
constexpr bool_t has_unique_object_representations_v
Shorthand for has_unique_object_representations<T>::value
Definition type_traits.h:880
constexpr size_t is_function_v
Check if T is a class.
Definition type_traits.h:616
constexpr bool_t is_trivially_copyable_v
Shorthand for is_trivially_copyable<T>::value
Definition type_traits.h:847
constexpr bool_t is_bool_v
Shorthand for is_bool<T>::value
Definition type_traits.h:487
constexpr bool_t is_null_pointer_v
Shorthand for is_null_pointer<T>::value
Definition type_traits.h:470
constexpr bool_t is_scalar_v
Shorthand for is_scalar<T>::value
Definition type_traits.h:749
constexpr bool_t is_arithmetic_v
Shorthand for is_arithmetic<T>::value
Definition type_traits.h:718
constexpr bool_t is_base_of_v
Shorthand for is_base_of<T0, T1>::value
Definition type_traits.h:1051
constexpr bool_t is_reference_v
Shorthand for is_floating_point<T>::value
Definition type_traits.h:798
constexpr bool_t is_compound_v
Shorthand for is_compound<T>::value
Definition type_traits.h:781
constexpr bool_t is_indexable_v
Shorthand for is_indexable<TypeT0, TypeT1>::value
Definition type_traits.h:1260
constexpr bool_t is_abstract_v
Shorthand for is_abstract<T>::value
Definition type_traits.h:928
constexpr bool_t is_mappable_v
Shorthand for is_mappable<TypeT0, TypeT1>::value
Definition type_traits.h:1276
constexpr bool_t is_standard_layout_v
Shorthand for is_standard_layout<T>::value
Definition type_traits.h:863
constexpr bool_t is_move_constructible_v
Shorthand for is_copy_constructible<ClassT>::value
Definition type_traits.h:1142
constexpr bool_t is_member_object_pointer_v
Shorthand for is_member_object_pointer<T>::value
Definition type_traits.h:701
constexpr bool_t is_same_v
Shorthand for is_same<T0, T1>::value
Definition type_traits.h:1032
constexpr bool_t is_trivially_constructible_v
Shorthand for is_trivially_constructible<ClassT, ArgsT...>::value
Definition type_traits.h:1100
constexpr bool_t is_unsigned_v
Shorthand for is_unsigned<T>::value
Definition type_traits.h:1012
constexpr bool_t is_nothrow_destructible_v
Shorthand for is_nothrow_destructible<ClassT, ArgsT...>::value
Definition type_traits.h:1228
constexpr bool_t is_integral_v
Shorthand for is_integral<T>::value
Definition type_traits.h:504
constexpr bool_t is_constructible_v
Shorthand for is_constructible<ClassT, ArgsT...>::value
Definition type_traits.h:1086
constexpr bool_t is_signed_v
Shorthand for is_signed<T>::value
Definition type_traits.h:994
constexpr bool_t is_copy_assignable_v
Shorthand for is_copy_assignable<ClassT>::value
Definition type_traits.h:1172
constexpr bool_t is_destructible_v
Shorthand for is_destructible<ClassT, ArgsT...>::value
Definition type_traits.h:1200
constexpr bool_t is_iterable_v
Shorthand for is_iterable<TypeT0, TypeT1>::value
Definition type_traits.h:1244
constexpr size_t is_enum_v
Check if T is a class.
Definition type_traits.h:571
constexpr bool_t is_pointer_v
Shorthand for is_pointer<T>::value
Definition type_traits.h:633
constexpr bool_t is_void_v
Shorthand for is_void<T>::value
Definition type_traits.h:453
constexpr bool_t is_floating_point_v
Shorthand for is_floating_point<T>::value
Definition type_traits.h:521
constexpr bool_t is_empty_v
Shorthand for is_empty<T>::value
Definition type_traits.h:896
bool bool_t
A conditional type.
Definition types.h:214