]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_default_constructible.pass.cpp
Vendor import of libc++ trunk r351319 (just before the release_80
[FreeBSD/FreeBSD.git] / test / std / utilities / meta / meta.unary / meta.unary.prop / is_nothrow_default_constructible.pass.cpp
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // type_traits
11
12 // is_nothrow_default_constructible
13
14 #include <type_traits>
15 #include "test_macros.h"
16
17 template <class T>
18 void test_is_nothrow_default_constructible()
19 {
20     static_assert( std::is_nothrow_default_constructible<T>::value, "");
21     static_assert( std::is_nothrow_default_constructible<const T>::value, "");
22     static_assert( std::is_nothrow_default_constructible<volatile T>::value, "");
23     static_assert( std::is_nothrow_default_constructible<const volatile T>::value, "");
24 #if TEST_STD_VER > 14
25     static_assert( std::is_nothrow_default_constructible_v<T>, "");
26     static_assert( std::is_nothrow_default_constructible_v<const T>, "");
27     static_assert( std::is_nothrow_default_constructible_v<volatile T>, "");
28     static_assert( std::is_nothrow_default_constructible_v<const volatile T>, "");
29 #endif
30 }
31
32 template <class T>
33 void test_has_not_nothrow_default_constructor()
34 {
35     static_assert(!std::is_nothrow_default_constructible<T>::value, "");
36     static_assert(!std::is_nothrow_default_constructible<const T>::value, "");
37     static_assert(!std::is_nothrow_default_constructible<volatile T>::value, "");
38     static_assert(!std::is_nothrow_default_constructible<const volatile T>::value, "");
39 #if TEST_STD_VER > 14
40     static_assert(!std::is_nothrow_default_constructible_v<T>, "");
41     static_assert(!std::is_nothrow_default_constructible_v<const T>, "");
42     static_assert(!std::is_nothrow_default_constructible_v<volatile T>, "");
43     static_assert(!std::is_nothrow_default_constructible_v<const volatile T>, "");
44 #endif
45 }
46
47 class Empty
48 {
49 };
50
51 union Union {};
52
53 struct bit_zero
54 {
55     int :  0;
56 };
57
58 struct A
59 {
60     A();
61 };
62
63 #if TEST_STD_VER >= 11
64 struct DThrows
65 {
66     DThrows()  noexcept(true) {}
67     ~DThrows() noexcept(false) {}
68 };
69 #endif
70
71 int main()
72 {
73     test_has_not_nothrow_default_constructor<void>();
74     test_has_not_nothrow_default_constructor<int&>();
75     test_has_not_nothrow_default_constructor<A>();
76 #if TEST_STD_VER >= 11
77     test_has_not_nothrow_default_constructor<DThrows>(); // This is LWG2116
78 #endif
79
80     test_is_nothrow_default_constructible<Union>();
81     test_is_nothrow_default_constructible<Empty>();
82     test_is_nothrow_default_constructible<int>();
83     test_is_nothrow_default_constructible<double>();
84     test_is_nothrow_default_constructible<int*>();
85     test_is_nothrow_default_constructible<const int*>();
86     test_is_nothrow_default_constructible<char[3]>();
87     test_is_nothrow_default_constructible<bit_zero>();
88 }