std::has_virtual_destructor (3) - Linux Manuals

std::has_virtual_destructor: std::has_virtual_destructor

NAME

std::has_virtual_destructor - std::has_virtual_destructor

Synopsis


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)
[static]

Member functions


              converts the object to bool, returns value
operator bool (public member function)


operator() returns value
              (public member function)
(C++14)

Member types


Type Definition
value_type bool
type std::integral_constant<bool, value>

Notes


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)

Example


// 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';
  }

Output:


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

See also


is_destructible
is_trivially_destructible
is_nothrow_destructible checks if a type has a non-deleted destructor
                          (class template)
(C++11)
(C++11)
(C++11)