fennec
Loading...
Searching...
No Matches
type_traits.h
Go to the documentation of this file.
1// =====================================================================================================================
2// fennec, a free and open source game engine
3// Copyright © 2025 Medusa Slockbower
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17// =====================================================================================================================
18
30
31#ifndef FENNEC_LANG_TYPE_TRAITS_H
32#define FENNEC_LANG_TYPE_TRAITS_H
33
423
426#include <fennec/lang/detail/_type_traits.h>
427
428namespace fennec
429{
430
431constexpr inline bool is_constant_evaluated() noexcept {
432 if consteval {
433 return true;
434 } else {
435 return false;
436 }
437}
438
439
440// fennec::is_void =====================================================================================================
441
447template<typename T> struct is_void
448 : detail::_is_void<remove_cvref_t<T>>{};
449
453template<typename T> constexpr bool_t is_void_v = is_void<T>::value;
454
455
456
457// fennec::is_null_pointer =============================================================================================
458
464template<typename T> struct is_null_pointer
465 : detail::_is_null_pointer<remove_cvref_t<T>>{};
466
470template<typename T> constexpr bool_t is_null_pointer_v = is_null_pointer<T>::value;
471
472
473
474// fennec::is_bool =====================================================================================================
475
481template<typename T> struct is_bool
482 : detail::_is_bool<remove_cvref_t<T>>{};
483
487template<typename T> constexpr bool_t is_bool_v = is_bool<T>::value;
488
489
490
491// fennec::is_integral =================================================================================================
492
498template<typename T> struct is_integral
499 : detail::_is_integral<remove_cvref_t<T>> {};
500
504template<typename T> constexpr bool_t is_integral_v = is_integral<T>::value;
505
506
507
508// fennec::is_floating_point ===========================================================================================
509
515template<typename T> struct is_floating_point
516 : detail::_is_floating_point<remove_cvref_t<T>>{};
517
521template<typename T> constexpr bool_t is_floating_point_v = is_floating_point<T> {};
522
523
524
525// fennec::is_array ====================================================================================================
526
527#ifdef FENNEC_BUILTIN_IS_ARRAY
528
532template<typename T> struct is_array
533 : bool_constant<FENNEC_BUILTIN_IS_ARRAY(T)> {};
534
535#else
536
540template<typename T> struct is_array
541 : false_type {};
542
543// overload for a sized array type
544template<typename T, size_t N> struct is_array<T[N]>
545 : true_type {};
546
547// overload for a generic array type
548template<typename T> struct is_array<T[]>
549 : true_type {};
550
551#endif
552
556template<typename T> constexpr bool_t is_array_v = is_array<T>::value;
557
558
559
560// fennec::is_enum ====================================================================================================
561
565template<typename T> struct is_enum
566 : bool_constant<FENNEC_BUILTIN_IS_ENUM(T)> {};
567
571template<typename T> constexpr size_t is_enum_v = is_enum<T>::value;
572
573
574
575// fennec::is_union ====================================================================================================
576
580template<typename T> struct is_union
581 : bool_constant<FENNEC_BUILTIN_IS_UNION(T)> {};
582
586template<typename T> constexpr size_t is_union_v = is_union<T>::value;
587
588
589
590// fennec::is_class ====================================================================================================
591
595template<typename T> struct is_class
596 : bool_constant<FENNEC_BUILTIN_IS_CLASS(T)> {};
597
601template<typename T> constexpr size_t is_class_v = is_class<T>::value;
602
603
604
605// fennec::is_function =================================================================================================
606
610template<typename T> struct is_function
611 : bool_constant<FENNEC_BUILTIN_IS_FUNCTION(T)> {};
612
616template<typename T> constexpr size_t is_function_v = is_function<T>::value;
617
618
619
620// fennec::is_pointer ==================================================================================================
621
627template<typename T> struct is_pointer
628 : detail::_is_pointer<remove_cvref_t<T>>{};
629
633template<typename T> constexpr bool_t is_pointer_v = is_pointer<T> {};
634
635
636
637// fennec::is_lvalue_reference =========================================================================================
638
644template<typename T> struct is_lvalue_reference
645 : detail::_is_lvalue_reference<T>{};
646
650template<typename T> constexpr bool_t is_lvalue_reference_v = is_lvalue_reference<T> {};
651
652
653
654// fennec::is_rvalue_reference =========================================================================================
655
661template<typename T> struct is_rvalue_reference
662 : detail::_is_rvalue_reference<T>{};
663
667template<typename T> constexpr bool_t is_rvalue_reference_v = is_rvalue_reference<T> {};
668
669
670
671// fennec::is_member_function_pointer ==================================================================================
672
678template<typename T> struct is_member_function_pointer
679 : bool_constant<FENNEC_BUILTIN_IS_MEMBER_FUNCTION_POINTER(T)> {};
680
685
686
687
688// fennec::is_member_object_pointer ====================================================================================
689
695template<typename T> struct is_member_object_pointer
696 : bool_constant<FENNEC_BUILTIN_IS_MEMBER_OBJECT_POINTER(T)> {};
697
702
703
704
705// fennec::is_arithmetic ===============================================================================================
706
712template<typename T> struct is_arithmetic
713 : bool_constant<is_integral_v<T> or is_floating_point_v<T>>{};
714
718template<typename T> constexpr bool_t is_arithmetic_v = is_arithmetic<T>::value;
719
720
721// fennec::is_fundamental ==============================================================================================
722
726template<typename T> struct is_fundamental
727 : bool_constant<is_arithmetic_v<T> or is_void_v<T> or is_null_pointer_v<T>>{};
728
732template<typename T> constexpr bool_t is_fundamental_v = is_fundamental<T>::value;
733
734
735
736// fennec::is_scalar ===================================================================================================
737
743template<typename T> struct is_scalar
744 : bool_constant<is_arithmetic_v<T> or is_enum_v<T> or is_pointer_v<T>>{};
745
749template<typename T> constexpr bool_t is_scalar_v = is_scalar<T>::value;
750
751
752
753// fennec::is_object ===================================================================================================
754
760template<typename T> struct is_object : bool_constant<FENNEC_BUILTIN_IS_OBJECT(T)> {};
761
765template<typename T> constexpr bool_t is_object_v = is_object<T>::value;
766
767
768
769// fennec::is_compound =================================================================================================
770
776template<typename T> struct is_compound : bool_constant<not is_fundamental_v<T>> {};
777
781template<typename T> constexpr bool_t is_compound_v = is_compound<T>::value;
782
783
784
785// fennec::is_reference ================================================================================================
786
792template<typename T> struct is_reference
793 : detail::_is_reference<T>{};
794
798template<typename T> constexpr bool_t is_reference_v = is_reference<T> {};
799
800
801
802// fennec::is_member_pointer ===========================================================================================
803
809template<typename T> struct is_member_pointer
810 : bool_constant<FENNEC_BUILTIN_IS_MEMBER_POINTER(T)> {};
811
815template<typename T> constexpr bool_t is_member_pointer_v = is_member_pointer<T> {};
816
817
818
819// fennec::is_trivial ==================================================================================================
820
826template<typename T> struct is_trivial : bool_constant<FENNEC_BUILTIN_IS_TRIVIAL(T)> {};
827
831template<typename T> constexpr bool_t is_trivial_v = is_trivial<T>{};
832
833
834
835// fennec::is_trivially_copyable =======================================================================================
836
842template<typename T> struct is_trivially_copyable : bool_constant<FENNEC_BUILTIN_IS_TRIVIALLY_COPYABLE(T)> {};
843
847template<typename T> constexpr bool_t is_trivially_copyable_v = is_trivially_copyable<T>{};
848
849
850
851// fennec::is_standard_layout ==========================================================================================
852
858template<typename T> struct is_standard_layout : bool_constant<FENNEC_BUILTIN_IS_STANDARD_LAYOUT(T)> {};
859
863template<typename T> constexpr bool_t is_standard_layout_v = is_standard_layout<T>{};
864
865
866
867// fennec::has_unique_object_representations ===========================================================================
868
874template<typename T> struct has_unique_object_representations
875 : bool_constant<FENNEC_BUILTIN_HAS_UNIQUE_OBJECT_REPRESENTATIONS(remove_cv_t<T>)> {};
876
881
882
883
884// fennec::is_empty ====================================================================================================
885
891template<typename T> struct is_empty : bool_constant<FENNEC_BUILTIN_IS_EMPTY(T)> {};
892
896template<typename T> constexpr bool_t is_empty_v = is_empty<T>{};
897
898
899
900// fennec::is_polymorphic ==============================================================================================
901
907template<typename T> struct is_polymorphic : bool_constant<FENNEC_BUILTIN_IS_POLYMORPHIC(T)> {};
908
912template<typename T> constexpr bool_t is_polymorphic_v = is_polymorphic<T>{};
913
914
915
916// fennec::is_abstract =================================================================================================
917
923template<typename T> struct is_abstract : bool_constant<FENNEC_BUILTIN_IS_ABSTRACT(T)> {};
924
928template<typename T> constexpr bool_t is_abstract_v = is_abstract<T>{};
929
930
931
932// fennec::is_complete =================================================================================================
933
939template<typename T> struct is_complete : detail::_is_complete<T>::type {};
940
944template<typename T> constexpr bool_t is_complete_v = is_complete<T>{};
945
946
947
948// fennec::is_final =================================================================================================
949
955template<typename T> struct is_final : bool_constant<FENNEC_BUILTIN_IS_FINAL(T)> {};
956
960template<typename T> constexpr bool_t is_final_v = is_final<T>{};
961
962
963
964// fennec::is_aggregate =================================================================================================
965
971template<typename T> struct is_aggregate : bool_constant<FENNEC_BUILTIN_IS_AGGREGATE(T)> {};
972
976template<typename T> constexpr bool_t is_aggregate_v = is_aggregate<T>{};
977
978
979
980// fennec::is_signed =================================================================================================
981
982
988template<typename T> struct is_signed
989 : detail::_is_signed<remove_cvref_t<T>> {};
990
994template<typename T> constexpr bool_t is_signed_v = is_signed<T>::value;
995
996
997
998// fennec::is_unsigned =================================================================================================
999
1000
1006template<typename T> struct is_unsigned
1007 : detail::_is_unsigned<remove_cvref_t<T>> {};
1008
1012 template<typename T> constexpr bool_t is_unsigned_v = is_unsigned<T>::value;
1013
1014
1015// fennec::is_same =====================================================================================================
1016
1023template<typename T0, typename T1> struct is_same : false_type {};
1024
1025// true case
1026template<typename T> struct is_same<T, T> : true_type {};
1027
1032template<typename T0, typename T1> constexpr bool_t is_same_v = is_same<T0, T1> {};
1033
1034
1035// fennec::is_base_of ==================================================================================================
1036
1043template<typename Base, typename Derived> struct is_base_of : bool_constant<
1044 is_class_v<Base> and is_class_v<Derived> and decltype(detail::_is_base_of<Base, Derived>(0))::value
1045> {};
1046
1051template<typename Base, typename Derived> constexpr bool_t is_base_of_v = is_base_of<Base, Derived> {};
1052
1053
1054
1055// fennec::is_convertible ==============================================================================================
1056
1063template<typename FromT, typename ToT> struct is_convertible
1064 : bool_constant<FENNEC_BUILTIN_IS_CONVERTIBLE(FromT, ToT)> {};
1065
1070template<typename FromT, typename ToT> constexpr bool_t is_convertible_v = is_convertible<FromT, ToT>{};
1071
1072
1073
1074// fennec::is_constructible ============================================================================================
1075
1081template<typename ClassT, typename...ArgsT> struct is_constructible
1082 : bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, ArgsT...)> {};
1083
1086template<typename ClassT, typename...ArgsT> constexpr bool_t is_constructible_v = is_constructible<ClassT, ArgsT...>{};
1087
1088
1089
1090// fennec::is_trivially_constructible ==================================================================================
1091
1095template<typename ClassT> struct is_trivially_constructible
1096 : bool_constant<FENNEC_BUILTIN_IS_TRIVIALLY_CONSTRUCTIBLE(ClassT)> {};
1097
1101
1102
1103
1104// fennec::is_default_constructible ====================================================================================
1105
1109template<typename ClassT> struct is_default_constructible
1110 : bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT,)> {};
1111
1115
1116
1117
1118// fennec::is_copy_constructible =======================================================================================
1119
1123template<typename ClassT> struct is_copy_constructible
1124 : bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, add_lvalue_reference_t<const ClassT>)> {};
1125
1128template<typename ClassT, typename...ArgsT> constexpr bool_t is_copy_constructible_v = is_copy_constructible<ClassT>{};
1129
1130
1131
1132// fennec::is_move_constructible =======================================================================================
1133
1137template<typename ClassT> struct is_move_constructible
1138 : bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, add_rvalue_reference_t<ClassT>)> {};
1139
1142template<typename ClassT, typename...ArgsT> constexpr bool_t is_move_constructible_v = is_move_constructible<ClassT>{};
1143
1144
1145
1146// fennec::is_assignable ===============================================================================================
1147
1153template<typename ClassAT, typename ClassBT> struct is_assignable
1154 : bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(ClassAT, ClassBT)> {};
1155
1158template<typename ClassT, typename...ArgsT> constexpr bool_t is_assignable_v = is_assignable<ClassT, ArgsT...>{};
1159
1160
1161
1162// fennec::is_copy_assignable ==========================================================================================
1163
1167template<typename ClassT> struct is_copy_assignable
1168 : bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(add_lvalue_reference_t<ClassT>, add_lvalue_reference_t<const ClassT>)> {};
1169
1172template<typename ClassT> constexpr bool_t is_copy_assignable_v = is_copy_assignable<ClassT>{};
1173
1174
1175
1176// fennec::is_move_assignable ==========================================================================================
1177
1181template<typename ClassT> struct is_move_assignable
1182 : bool_constant<FENNEC_BUILTIN_IS_ASSIGNABLE(add_lvalue_reference_t<ClassT>, add_rvalue_reference_t<ClassT>)> {};
1183
1186template<typename ClassT> constexpr bool_t is_move_assignable_v = is_move_assignable<ClassT>{};
1187
1188
1189
1190// fennec::is_destructible =============================================================================================
1191
1195template<typename ClassT> struct is_destructible
1196 : detail::_is_destructible<ClassT>::type {};
1197
1200template<typename ClassT> constexpr bool_t is_destructible_v = is_destructible<ClassT>{};
1201
1202
1203
1204// fennec::is_trivially_destructible ===================================================================================
1205
1209template<typename ClassT> struct is_trivially_destructible
1210 : bool_constant<FENNEC_BUILTIN_IS_TRIVIALLY_DESTRUCTIBLE(ClassT)> {};
1211
1215
1216
1217
1218// fennec::is_nothrow_destructible =====================================================================================
1219
1223template<typename ClassT> struct is_nothrow_destructible
1224 : detail::_is_nothrow_destructible<ClassT>::type {};
1225
1229
1230
1231
1232// fennec::is_iterable =================================================================================================
1233
1239template<typename T> struct is_iterable : decltype(detail::_is_iterable<T>(0)) {};
1240
1244template<typename T> constexpr bool_t is_iterable_v = is_iterable<T>{};
1245
1246
1247
1248// fennec::is_indexable ================================================================================================
1249
1255template<typename T> struct is_indexable : decltype(detail::_is_indexable<T>(0)) {};
1256
1260template<typename T> constexpr bool_t is_indexable_v = is_indexable<T>{};
1261
1262
1263
1264// fennec::is_mappable =================================================================================================
1265
1271template<typename T> struct is_mappable : decltype(detail::_is_mappable<T>(0)) {};
1272
1276template<typename T> constexpr bool_t is_mappable_v = is_mappable<T>{};
1277
1278
1279}
1280
1281#endif // FENNEC_LANG_TYPE_TRAITS_H
Intrinsics
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
Type Transforms
bool bool_t
A conditional type.
Definition types.h:214