std::is_arithmetic - cppreference.com (original) (raw)

| | | | | ------------------------------------------- | | ------------- | | template< class T > struct is_arithmetic; | | (since C++11) |

std::is_arithmetic is a UnaryTypeTrait.

If T is an arithmetic type (that is, an integral type or a floating-point type) or a cv-qualified version thereof, provides the member constant value equal to true. For any other type, value is false.

If the program adds specializations for std::is_arithmetic or std::is_arithmetic_v(since C++17), the behavior is undefined.

Contents

[edit] Template parameters

[edit] Helper variable template

| template< class T > constexpr bool is_arithmetic_v = is_arithmetic<T>::value; | | (since C++17) | | ----------------------------------------------------------------------------------- | | ------------- |

Inherited from std::integral_constant

Member constants

| | true if T is an arithmetic type, false otherwise (public static member constant) | | ----------------------------------------------------------------------------------- |

Member functions

| | converts the object to bool, returns value (public member function) | | ---------------------------------------------------------------------- | | | returns value (public member function) |

Member types

[edit] Notes

Arithmetic types are the built-in types for which the arithmetic operators (+, -, *, /) are defined (possibly in combination with the usual arithmetic conversions).

Specializations of std::numeric_limits are provided for all arithmetic types.

[edit] Possible implementation

[edit] Example

#include #include #include   class A {};   enum class B : int { e };   static_assert( std::is_arithmetic_v == true and std::is_arithmetic_v == true and std::is_arithmetic_v == true and std::is_arithmetic_v == true and std::is_arithmetic_v == true and std::is_arithmetic_v == true and std::is_arithmetic_v == 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 == false and std::is_arithmetic_v == 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() {}

[edit] See also