std::is_polymorphic (3) - Linux Manuals

std::is_polymorphic: std::is_polymorphic


std::is_polymorphic - std::is_polymorphic


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

If T is a polymorphic_class (that is, a non-union class that declares or inherits at least one 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_polymorphic_v = is_polymorphic<T>::value;

Inherited from std::integral_constant

Member constants

value true if T is a polymorphic 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 : B {};

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



See also

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

is_abstract checks if a type is an abstract class type
            (class template)