1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 // has_virtual_destructor
13 #include <type_traits>
15 #include "test_macros.h"
18 void test_has_virtual_destructor()
20 static_assert( std::has_virtual_destructor
<T
>::value
, "");
21 static_assert( std::has_virtual_destructor
<const T
>::value
, "");
22 static_assert( std::has_virtual_destructor
<volatile T
>::value
, "");
23 static_assert( std::has_virtual_destructor
<const volatile T
>::value
, "");
25 static_assert( std::has_virtual_destructor_v
<T
>, "");
26 static_assert( std::has_virtual_destructor_v
<const T
>, "");
27 static_assert( std::has_virtual_destructor_v
<volatile T
>, "");
28 static_assert( std::has_virtual_destructor_v
<const volatile T
>, "");
33 void test_has_not_virtual_destructor()
35 static_assert(!std::has_virtual_destructor
<T
>::value
, "");
36 static_assert(!std::has_virtual_destructor
<const T
>::value
, "");
37 static_assert(!std::has_virtual_destructor
<volatile T
>::value
, "");
38 static_assert(!std::has_virtual_destructor
<const volatile T
>::value
, "");
40 static_assert(!std::has_virtual_destructor_v
<T
>, "");
41 static_assert(!std::has_virtual_destructor_v
<const T
>, "");
42 static_assert(!std::has_virtual_destructor_v
<volatile T
>, "");
43 static_assert(!std::has_virtual_destructor_v
<const volatile T
>, "");
65 virtual ~Abstract() = 0;
75 test_has_not_virtual_destructor
<void>();
76 test_has_not_virtual_destructor
<A
>();
77 test_has_not_virtual_destructor
<int&>();
78 test_has_not_virtual_destructor
<Union
>();
79 test_has_not_virtual_destructor
<Empty
>();
80 test_has_not_virtual_destructor
<int>();
81 test_has_not_virtual_destructor
<double>();
82 test_has_not_virtual_destructor
<int*>();
83 test_has_not_virtual_destructor
<const int*>();
84 test_has_not_virtual_destructor
<char[3]>();
85 test_has_not_virtual_destructor
<char[]>();
86 test_has_not_virtual_destructor
<bit_zero
>();
88 test_has_virtual_destructor
<Abstract
>();
89 test_has_virtual_destructor
<NotEmpty
>();