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

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.

The behavior of a program that adds specializations for is_class or is_class_v (since C++17) is undefined.

Template parameters

T - a type to check

Helper variable template

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

Inherited from std::integral_constant

Member constants

true if T is a non-union class type, false otherwise
(public static member constant)

Member functions

operator bool
converts the object to bool, returns value
(public member function)
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>
    std::integral_constant<bool, !std::is_union<T>::value> test(int T::*);
    std::false_type test(...);
template<class T>
struct is_class : decltype(detail::test<T>(nullptr)) {};


#include <iostream>
#include <type_traits>
struct A {};
class B {};
enum class E {};
union U { class UC {}; };
static_assert(not std::is_class_v<U>);
int main() 
    std::cout << std::boolalpha;
    std::cout << std::is_class<A>::value << ": A\n";
    std::cout << std::is_class_v<B> << ": B\n";
    std::cout << std::is_class_v<B*> << ": B*\n";
    std::cout << std::is_class_v<B&> << ": B&\n";
    std::cout << std::is_class_v<const B> << ": const B\n";
    std::cout << std::is_class<E>::value << ": E\n";
    std::cout << std::is_class_v<int> << ": int\n";
    std::cout << std::is_class_v<struct S> << ": struct S (incomplete)\n";
    std::cout << std::is_class_v<class C> << ": class C (incomplete)\n";


true: A
true: B 
false: B* 
false: B& 
true: const B 
false: E
false: int
true: struct S (incomplete)
true: class C (incomplete)

See also

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.