std::is_abstract (3) - Linux Manuals

std::is_abstract: std::is_abstract


std::is_abstract - std::is_abstract


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

If T is an abstract_class (that is, a non-union class that declares or inherits at least one pure virtual function), provides the member constant value equal true. For any other type, value is false.
If T is a non-union class type, T shall be a complete type; otherwise, the behavior is undefined.

Template parameters

T - a type to check

Helper variable template

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

Inherited from std::integral_constant

Member constants

value true if T is an abstract_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>


// Run this code

  #include <iostream>
  #include <type_traits>

  struct A {
      int m;

  struct B {
      virtual void foo();

  struct C {
      virtual void foo() = 0;

  struct D : C {};

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



See also

is_class checks if a type is a non-union class type
               (class template)

is_polymorphic checks if a type is a polymorphic class type
               (class template)