14static_assert(__cplusplus == 201103,
"");
18#include <bits/stdc++.h>
20#if __has_include (<version>)
34 static_assert(__cpp_decltype,
"");
40 assert((is_same<
decltype(a),
decltype(b)>::value));
41 assert((!is_same<
decltype(a),
unsigned>::value));
42 assert((is_same<int, int32_t>::value));
43 assert((is_same<signed, int32_t>::value));
45 assert(is_integral<int>::value);
46 assert(is_integral<bool>::value);
47 assert(!is_integral<float>::value);
48 assert(is_pointer<int*>::value);
49 assert(
sizeof (
long long) >= 8);
69 assert(u2.get() == p1);
72 assert(u2.get() == &d);
75 u2.reset(
new int(10));
79 assert(u2 ==
nullptr);
90 assert(!s1.use_count());
92 auto s2 = make_shared<int>(1);
93 assert(s2.use_count() == 1);
96 assert(s1.use_count() == 2);
99 assert(*s1 == *s1.get());
103 assert(s1.use_count() == 1);
104 assert(!s2.use_count());
111 std::weak_ptr<int> wp;
114 assert(!wp.use_count());
115 auto sp = std::make_shared<int>(1);
117 assert(*wp.lock() == 1);
128 auto a =
new int[3] {1, 2, 3};
132 auto as =
new string[3] {
"1",
"2",
"3"};
133 assert(as[2] ==
"3");
148 assert(is_const<
typename remove_reference<
decltype(x)>::type>::value);
149 assert(is_lvalue_reference<
decltype(x)>::value);
155 assert(is_lvalue_reference<
decltype(x)>::value);
161 assert(is_rvalue_reference<
decltype(x)>::value);
189 assert(is_reference<int&>::value);
192 assert(is_lvalue_reference<int&>::value);
195 assert(is_rvalue_reference<int&&>::value);
207 reference_wrapper<int> rw = i;
233 struct C {
int a, b, c; };
234 auto o2 = C {1, 2, 3};
238 auto uses_il = [](initializer_list<int> il) {
239 assert(*il.begin() == 3);
240 assert(il.size() == 4);
242 uses_il({3, 2, 1, 0});
251 array<int, 3> a {1, 2};
277 struct Obj2 { Obj2* orig =
this;
int ballast[4]; };
278 auto&& o2 = [](){
return Obj2();}();
279 assert(&o2 == o2.orig);