std::is_class (3) - Linux Manuals

std::is_class: std::is_class


std::is_class - std::is_class


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

Checks whether T is a non-union class type. Provides the member constant value which is equal to true, if T is a class type (but not union). Otherwise, value is equal to false.

Template parameters

T - a type to check

Helper variable template

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

Inherited from std::integral_constant

Member constants

value true if T is a non-union class 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

  namespace detail {
      template <class T> char test(int T::*);
      struct two { char c[2]; };
      template <class T> two test(...);

  template <class T>
  struct is_class : std::integral_constant<bool, sizeof(detail::test<T>(0))==1
                                              && !std::is_union<T>::value> {};


// Run this code

  #include <iostream>
  #include <type_traits>

  struct A {};

  class B {};

  enum class C {};

  int main()
      std::cout << std::boolalpha;
      std::cout << std::is_class<A>::value << '\n';
      std::cout << std::is_class<B>::value << '\n';
      std::cout << std::is_class<C>::value << '\n';
      std::cout << std::is_class<int>::value << '\n';



See also

is_union checks if a type is an union type
         (class template)