Void<T>
: T isvoid
or any cv-qualified variant ofvoid
Null<T>
: T isstd::nullptr_t
or any cv-qualified variant ofstd::nullptr_t
Integral<T>
: T represents integers (all variants ofint
, internally:std::is_integral<T>
)FloatingPoint<T>
: T represents floating point numbers (float
ordouble
, internally:std::is_floating_point<T>
)Array<T>
: T is a C array (likeint[]
orchar[32]
)Enum<T>
: T is anenum
Union<T>
: T is anunion
Class<T>
: T is aclass
Function<T>
: T is a function: not a function pointer nor a callable object nor a lambdaPointer<T>: T is a pointer (like
int*`)MemberObjectPointer<T>
: T is a member pointer to an attributeMemberFunctionPointer<T>
: T is a member pointer to a member function
MemberPointer<T
>: T is either a member pointer to an attribute or a member pointer to a member functionUnsigned<T>
: T is an unsigned integer type (likeunsigned int
orunsigned char
)Signed<T>
: T is a signed integer type (likeint
orlong long int
)Fundamental<T>
: T is a fundamental type (all variants ofint
,float
,double
,std::nullptr_t
orvoid
)Compound<T>
: T is a compound type, ie: not fundamentalScalar<T>
: T is a scalar type: either a variant ofint
,float
,double
, a pointer, a pointer to member, an enumeration orstd::nullptr_t
Object<T>
: T is an object type: everything that is not a function, a reference ofvoid
Same<T1, T2>
: T1 and T2 are the same type (and not only mutually convertible)Convertible<T1, T2>
: T1 is convertible into T2Compatible<T1, T2>
: T1 and T2 are mutally convertible, ie: Convertible<T1, T2> and Convertible<T2, T1>Common<Args...>
: It exists a common type to every type ofArgs...
. This type can be retrivied withCommonType<Args...>
(ex:CommonType<int, float>
->float
)
Const<T>
: T is const (likeconst int
)Volatile<T>
: T is volatile (likevolatile float
)lValue<T>
: T is a lvalue referencerValue<T>
: T is a rvalue referenceReference<T>
: T is a reference, either rvalue reference or lvalue reference (likeint&
orfloat&&
)ConstReference<T>
: T is a const reference, either rvalue reference or lvalue reference (likeconst int&
orconst float&&
)
Literal<T>
: T is a literal type: manipulable byconstexpr
expressionsEmpty<T>
: T contains no attributePOD<T>
orPODType<T>
: T is a POD (a C like struct: no constructor, no destructor, nooperator=()
)StandardLayout<T>
: T has a standard memory layout: no attribute except for base classesPolymorphic<T>
: T has virtual methodsAbstract<T>
: T does not implement every virtual functions of its parentsDerived<D, B>
: D derives/inherits from B: B is the base of D`
Constructible<T, Args...>
: T is constructible withArgs...
argumentsTriviallyConstructible<T, Args...>
: T is trivially constructible withArgs...
argumentsNothrowConstructible<T, Args...>
: T is constructible withArgs...
arguments and never throws exceptionCopyConstructible<T>
: T is copy constructibleTriviallyCopyConstructible<T>
: T is trivially copy constructible (equivalent tomemcopy
)NothrowCopyConstructible<T>
: T is copy constructible and never throws exceptionMoveConstructible<T>
: T is move constructibleTriviallyMoveConstructible<T>
: T is trivially move constructible (equivalent tomemcopy
)NothrowMoveConstructible<T>
: T is move constructible and never throws exception
Assignable<T, A>
: T is assignable with rhs of type ATriviallyAssignable<T, A>
: T is trivially assignable with rhs of type ANothrowAssignable<T, A>
: T is assignable with rhs of type A and never throws exceptionCopyAssignable<T>
: T is copy assignableTriviallyCopyAssignable<T>
: T is trivially copy assignable (equivalent tomemcopy
)NothrowCopyAssignable<T>
: T is copy assignable and never throws exceptionMoveAssignable<T>
: T is move assignableTriviallyMoveAssignable<T>
: T is trivially move assignable (equivalent tomemcopy
)NothrowMoveAssignable<T>
: T is move assignable and never throws exception
Destructible<T>
: T is destructibleTriviallyDestructible<T>
: T is trivially destructible (equivalent to noop)NothrowDestructible<T>
: T is destructible and never throws exceptionVirtualDestructor<T>
: T has a virtual destructor
Trivial<T>
: T is a trivial type: trivially constructible and trivially copyableCopyable<T>
: T is copyable (copy constructor + copy assignment)TriviallyCopyable<T>
: T is a trivially copyable (copy equivalent tomemcopy
)NothrowCopyable<T>
: T is a copyable and copy never throws exceptionMoveable<T>
: T is moveable (move constructor + move assignment)TriviallyMoveable<T>
: T is a trivially moveable (move equivalent tomemcopy
)NothrowMoveable<T>
: T is a moveable and move never throws exceptionSwappable<T>
: two elements of T can be swappedSwappable<T1, T2>
: T1 element can be swapped with T2 elementNothrowSwappable<T>
: two elements of T can be swapped without exception
Callable<T, Args...>
: T elements can be called withArgs...
arguments (like a regular function)FunctionObject<T, Args...>
: T is callable withArgs...
and is an objectPredicate<T, Args...>
: T is callable withArgs...
and result is a booleanUnaryPredicate<T, A1>
: T is a predicate with one argumentBinaryPredicate<T, A1, A2>
: T is a predicate with one argumentOperator<T, Args...>
: T is callable withArgs...
and result is notvoid
UnaryOperator<T, A1>
: T is a predicate with one argumentBinaryOperator<T, A1, A2>
: T is a predicate with one argument
EqualityComparable<T>
: two elements of T can be compared with==
operatorEqualityComparable<T1, T2>
: a T1 element and a T2 element can be compared with==
operatorComparable<T>
: two elements of T can be compared with==
or!=
operatorsComparable<T1, T2>
: a T1 element and a T2 element can be compared with==
or!=
operatorsLessThanComparable<T>
: two elements of T can be compared with<
operatorLessThanComparable<T1, T2>
: a T1 element and a T2 element can be compared with<
operatorWeaklyOrdered<T>
: two elements of T can be compared with<
,<=
,>
or>=
operatorsWeaklyOrdered<T1, T2>
: a T1 element and a T2 element can be compared with<
,<=
,>
or>=
operatorsOrdered<T>
: T is both WeaklyOrdered and ComparableOrdered<T1, T2>
: T1 and T2 are both WeaklyOrdered and Comparable
ArithmeticAdd<T>
: T implements+
,-
,+=
and-=
operatorsArithmeticAdd<T1, T2>
:+
,-
,+=
and-=
operators are available with (T1, T1), (T2, T2), (T1, T2), (T2, T1) typesCompatibleArithmeticAdd<T1, T2>
: T1 and T2 implements ArithmeticAdd. T1+T2 and T1+=T2 are implemented but not T2+T1 nor T2+=T1ArithmeticMul<T>
: T implements*
,/
,*=
and/=
operatorsArithmeticMul<T1, T2>
:*
,/
,*=
and/=
operators are available with (T1, T1), (T2, T2), (T1, T2), (T2, T1) typesCompatibleArithmeticMul<T1, T2>
: T1 and T2 implements ArithmeticAdd. T1T2 and T1=T2 are implemented but not T2T1 nor T2=T1Arithmetic<T>
: T is ArithmeticAdd and ArithmeticMulCompatibleArithmetic<T>
: T is CompatibleArithmeticAdd and CompatibleArithmeticMulArithmetic<T1, T2>
: T1 and T2 are ArithmeticAdd and ArithmeticMulCompatibleArithmetic<T1, T2>
: T1 and T2 are CompatibleArithmeticAdd and CompatibleArithmeticMul
PreIncrementable<T>
: a t element of type T can be preincremented: ++tPostIncrementable<T>
: a t element of type T can be postincremented: t++Incrementable<T>
: T is both PreIncrementable and PostIncrementablePreDecrementable<T>
: a t element of type T can be predecremented: ++tPostDecrementable<T>
: a t element of type T can be postdecremented: t++Decrementable<T>
: T is both PreDecrementable and PostDecrementableBitmask<T>
: T implements|
,&
,^
,|=
,&=
and^=
operatorsBitmask<T1, T2>
: T1 and T2 implement|
,&
,^
,|=
,&=
and^=
operatorsShiftableBitmask<T>
: T implements|
,&
,^
,|=
,&=
,^=
,<<
,>>
,<<=
and>>=
operators
Dereferenceable<T>
: T implements*
operator and this operator returns a referenceValueSwappable<T>
: T is Dereferenceable and the referenced type is SwappableValueSwappable<T1, T2>
: T1 and T2 are Dereferenceable and the referenced types are SwappableNothrowValueSwappable<T>
: T is Dereferenceable and the referenced type is NothrowSwappableNothrowValueSwappable<T1, T2>
: T1 and T2 are Dereferenceable and the referenced types are NothrowSwappableIterator<T>
: T is an object (constructible, copyable, destructible and sappable) that is dereferenceable and preincrementableMutableIterator<T>
: the value referenced by the iterator T is assignableConstIterator<T>
: the value referenced by the iterator T is not assignableInputIterator<T>
: T is an Iterator that is also incrementableMutableInputIterator<T>
: the value referenced by the InputIterator T is assignableConstInputIterator<T>
: the value referenced by the InputIterator T is not assignableForwardIterator<T>
: T is an InputIterator that is also comparableMutableForwardIterator<T>
: the value referenced by the ForwardIterator T is assignableConstForwardIterator<T>
: the value referenced by the ForwardIterator T is not assignableBidirectionnalIterator<T>
: T is a ForwardIterator that is also DecrementableMutableBidirectionnalIterator<T>
: the value referenced by the BidirectionnalIterator T is assignableConstBidirectionnalIterator<T>
: the value referenced by the BidirectionnalIterator T is not assignableRandomAccessIterator<T>
: T is a BidirectionnalIterator that implements+
,-
and[]
and is OrderedMutableRandomAccessIterator<T>
: the value referenced by the RandomAccessIterator T is assignableConstRandomAccessIterator<T>
: the value referenced by the RandomAccessIterator T is not assignable
Container<T>
: T is an object (default constructible, copyable, destructible, comparable, swappable) that implements.size()
,.empty()
,.begin()
,.cbegin()
,.end()
and.cend()
ReversibleContainer<T>
: T is a Container that implements.rbegin()
,.crbegin()
,.rend()
and.crend()
Boolean<T>
: T is useable in boolean context (conditions)Allocator<T>
: T is an allocatorHash<T>
: T is a callable that can be used as a hash function