Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(C++14) |
Defined in header <type_traits> | ||
template<class T> struct is_arithmetic; | (since C++11) | |
std::is_arithmetic
is aUnaryTypeTrait.
IfT
is an arithmetic type (that is, an integral type or a floating-point type) or acv-qualified
version thereof, provides the member constantvalue
equal totrue. For any other type,value
isfalse.
If the program adds specializations forstd::is_arithmetic
orstd::is_arithmetic_v
(since C++17), the behavior is undefined.
Contents |
T | - | a type to check |
template<class T> constexprbool is_arithmetic_v= is_arithmetic<T>::value; | (since C++17) | |
value [static] | true ifT is an arithmetic type,false otherwise(public static member constant) |
operator bool | converts the object tobool, returnsvalue (public member function) |
operator() (C++14) | returnsvalue (public member function) |
Type | Definition |
value_type | bool |
type | std::integral_constant<bool, value> |
Arithmetic types are the built-in types for which thearithmetic operators (+
,-
,*
,/
) are defined (possibly in combination with the usual arithmetic conversions).
Specializations ofstd::numeric_limits are provided for all arithmetic types.
template<class T>struct is_arithmetic:std::integral_constant<bool,std::is_integral<T>::value||std::is_floating_point<T>::value>{}; |
#include <atomic>#include <cstddef>#include <type_traits> class A{}; enumclass B:int{ e}; static_assert( std::is_arithmetic_v<bool>==true and std::is_arithmetic_v<char>==true and std::is_arithmetic_v<charconst>==true and std::is_arithmetic_v<int>==true and std::is_arithmetic_v<intconst>==true and std::is_arithmetic_v<float>==true and std::is_arithmetic_v<floatconst>==true and std::is_arithmetic_v<std::size_t>==true and std::is_arithmetic_v<char&>==false and std::is_arithmetic_v<char*>==false and std::is_arithmetic_v<int&>==false and std::is_arithmetic_v<int*>==false and std::is_arithmetic_v<float&>==false and std::is_arithmetic_v<float*>==false and std::is_arithmetic_v<A>==false and std::is_arithmetic_v<B>==false and std::is_arithmetic_v<decltype(B::e)>==false and std::is_arithmetic_v<std::byte>==false and std::is_arithmetic_v<std::atomic_int>==false); int main(){}
(C++11) | checks if a type is an integral type (class template)[edit] |
(C++11) | checks if a type is a floating-point type (class template)[edit] |