[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/types/is_integral [Back]  [Original]

std::is_integral cppreference.com
cppreference.com

std::is_integral

cppreference.com
 
C++
(C++20)
(C++20)
(C++11)
(C++20)
/
(C++11)
(C++11)
(C++11)
(C++17)
 
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)( C++20*)
(C++11)( C++20)
(C++11)
(C++17)
(C++11)(C++11)(C++11)
(C++11)( C++23)
(C++11)( C++23)
(C++11)
(C++11)
(C++17)

(C++11)( C++20*)(C++17)
 
<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)
,
( ) []

Web Proxy Viewer  |  New URL  |  Original Page