std::has_virtual_destructor (3) - Linux Manuals

std::has_virtual_destructor: std::has_virtual_destructor


std::has_virtual_destructor - std::has_virtual_destructor


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

If T is a type with a virtual destructor, 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.

Helper variable template

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

Inherited from std::integral_constant

Member constants

value true if T has a virtual destructor , 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>


If a class has a public virtual destructor, it can be derived from, and the derived object can be safely deleted through a pointer to the base object (GotW_#18)


// Run this code

  #include <iostream>
  #include <type_traits>
  #include <string>
  #include <stdexcept>

  int main()
      std::cout << std::boolalpha
                << "std::string has a virtual destructor? "
                << std::has_virtual_destructor<std::string>::value << '\n'
                << "std::runtime_error has a virtual destructor? "
                << std::has_virtual_destructor<std::runtime_error>::value << '\n';


  std::string has a virtual destructor? false
  std::runtime_error has a virtual destructor? true

See also

is_nothrow_destructible checks if a type has a non-deleted destructor
                          (class template)