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 // UNSUPPORTED: c++98, c++03, c++11, c++14
11 
12 // XFAIL: with_system_cxx_lib=macosx10.12
13 // XFAIL: with_system_cxx_lib=macosx10.11
14 // XFAIL: with_system_cxx_lib=macosx10.10
15 // XFAIL: with_system_cxx_lib=macosx10.9
16 // XFAIL: with_system_cxx_lib=macosx10.7
17 // XFAIL: with_system_cxx_lib=macosx10.8
18 
19 // <any>
20 
21 // any::reset() noexcept
22 
23 #include <any>
24 #include <cassert>
25 
26 #include "any_helpers.h"
27 
28 int main()
29 {
30     using std::any;
31     using std::any_cast;
32     // empty
33     {
34         any a;
35 
36         // noexcept check
37         static_assert(
38             noexcept(a.reset())
39           , "any.reset() must be noexcept"
40           );
41 
42         assertEmpty(a);
43 
44         a.reset();
45 
46         assertEmpty(a);
47     }
48     // small object
49     {
50         any a((small(1)));
51         assert(small::count == 1);
52         assertContains<small>(a, 1);
53 
54         a.reset();
55 
56         assertEmpty<small>(a);
57         assert(small::count == 0);
58     }
59     // large object
60     {
61         any a(large(1));
62         assert(large::count == 1);
63         assertContains<large>(a, 1);
64 
65         a.reset();
66 
67         assertEmpty<large>(a);
68         assert(large::count == 0);
69     }
70 }
71