std::is_fundamental (3) - Linux Man Pages

std::is_fundamental: std::is_fundamental


std::is_fundamental - std::is_fundamental


Defined in header <type_traits>
template< class T > (since C++11)
struct is_fundamental;

If T is a fundamental type (that is, arithmetic type, void, or nullptr_t), provides the member constant value equal true. For any other type, value is false.

Template parameters

T - a type to check

Helper variable template

template< class T > (since C++17)
inline constexpr bool is_fundamental_v = is_fundamental<T>::value;

Inherited from std::integral_constant

Member constants

value true if T is a fundamental type , false otherwise
         (public static member constant)

Member functions

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

operator() returns value
              (public member function)

Member types

Type Definition
value_type bool
type std::integral_constant<bool, value>

Possible implementation

  template< class T >
  struct is_fundamental
    : std::integral_constant<
          std::is_arithmetic<T>::value ||
          std::is_void<T>::value ||
          std::is_same<std::nullptr_t, typename std::remove_cv<T>::type>::value
          // you can also use 'std::is_null_pointer<T>::value' instead in C++14
  > {};


// Run this code

  #include <iostream>
  #include <type_traits>

  class A {};

  int main()
      std::cout << std::boolalpha;
      std::cout << "A\t" << std::is_fundamental<A>::value << '\n';
      std::cout << "int\t" << std::is_fundamental<int>::value << '\n';
      std::cout << "int&\t" << std::is_fundamental<int&>::value << '\n';
      std::cout << "int*\t" << std::is_fundamental<int*>::value << '\n';
      std::cout << "float\t" << std::is_fundamental<float>::value << '\n';
      std::cout << "float&\t" << std::is_fundamental<float&>::value << '\n';
      std::cout << "float*\t" << std::is_fundamental<float*>::value << '\n';


  A false

  int true

  int& false

  int* false

  float true

  float& false

  float* false

See also

is_compound checks if a type is a compound type
                (class template)

is_arithmetic checks if a type is an arithmetic type
                (class template)

is_void checks if a type is void
                (class template)

is_null_pointer checks if a type is std::nullptr_t
                (class template)