std::is_integral
cppreference.com
<tbody>
</tbody>
template< class T > struct is_integral; |
( C++11) | |
std::is_integral UnaryTypeTrait.
, T . - value, true, T bool, char, char8_t ( C++20), char16_t, char32_t, wchar_t, short, int, long, long long , , cv-. value false.
, std::is_integral std::is_integral_v ( C++17) .
| T |
<tbody> </tbody>
template< class T > inline constexpr bool is_integral_v = is_integral<T>::value; |
( C++17) | |
std::integral_constant
value [static] |
true, T , false (public static -) |
-
operator bool |
bool, value (public -) |
operator() (C++14) |
value (public -) |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
// : C++20
template< class T >
struct is_integral : std::bool_constant<
requires (T t, T* p, void (*f)(T)) // T*
{
reinterpret_cast<T>(t); //
f(0); //
p + t; // , ,
}> {};
|
#include <iostream>
#include <iomanip>
#include <type_traits>
class A {};
struct B { int x:4{2}; };
using BF = decltype(B::x); //
enum E : int {};
template <class T>
T f(T i)
{
static_assert(std::is_integral<T>::value, " .");
return i;
}
#define SHOW(...) \
std::cout << std::setw(29) << #__VA_ARGS__ << " == " << __VA_ARGS__ << '\n'
int main()
{
std::cout << std::boolalpha;
SHOW( std::is_integral<A>::value );
SHOW( std::is_integral_v<E> );
SHOW( std::is_integral_v<float> );
SHOW( std::is_integral_v<int*> );
SHOW( std::is_integral_v<int> );
SHOW( std::is_integral_v<const int> );
SHOW( std::is_integral_v<bool> );
SHOW( std::is_integral_v<char> );
SHOW( std::is_integral_v<BF> );
SHOW( f(123) );
}
:
std::is_integral<A>::value == false
std::is_integral_v<E> == false
std::is_integral_v<float> == false
std::is_integral_v<int*> == false
std::is_integral_v<int> == true
std::is_integral_v<const int> == true
std::is_integral_v<bool> == true
std::is_integral_v<char> == true
std::is_integral_v<BF> == true
f(123) == 123
(C++20) |
, () |
[static] |
(public static - std::numeric_limits)
|
(C++11) |
, ( ) |
(C++11) |
, ( ) |
(C++11) |
, ( ) |