GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
* Sign Up! *

Support
Customer Portal
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::has_virtual_destructor(3) C++ Standard Libary std::has_virtual_destructor(3)

std::has_virtual_destructor - std::has_virtual_destructor


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


std::has_virtual_destructor is a UnaryTypeTrait.


If T is a type with a virtual destructor, the base characteristic is std::true_type.
For any other type, the base characteristic is std::false_type.


If T is an incomplete non-union class type, the behavior is undefined.


If the program adds specializations for std::has_virtual_destructor or
std::has_virtual_destructor_v, the behavior is undefined.


T - a type to check


Helper variable template


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

Inherited from std::integral_constant


value true if T has a virtual destructor, false otherwise
[static] (public static member constant)


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


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


If a class C 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). In this case, std::is_polymorphic<C>::value is true.

// Run this code


#include <type_traits>


struct S {};
static_assert(!std::has_virtual_destructor_v<S>);


struct B { virtual ~B() {} };
static_assert(std::has_virtual_destructor_v<B>);


struct D : B { ~D() {} };
static_assert(std::has_virtual_destructor_v<D>);


int main()
{
B* pd = new D;
delete pd;
}


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
LWG 2015 C++11 the behavior was undefined if the base characteristic is
T is an incomplete union type std::false_type in this case


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

2024.06.10 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.