1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // UNSUPPORTED: c++98, c++03, c++11, c++14
12 // XFAIL: availability=macosx10.13
13 // XFAIL: availability=macosx10.12
14 // XFAIL: availability=macosx10.11
15 // XFAIL: availability=macosx10.10
16 // XFAIL: availability=macosx10.9
17 // XFAIL: availability=macosx10.8
18 // XFAIL: availability=macosx10.7
22 // any& operator=(any &&);
24 // Test move assignment.
29 #include "any_helpers.h"
30 #include "test_macros.h"
35 template <class LHS, class RHS>
36 void test_move_assign() {
37 assert(LHS::count == 0);
38 assert(RHS::count == 0);
45 assert(LHS::count == 2);
46 assert(RHS::count == 2);
50 assert(LHS::count == 1);
51 assert(RHS::count == 2 + a2.has_value());
52 LIBCPP_ASSERT(RHS::count == 2); // libc++ leaves the object empty
54 assertContains<RHS>(a, 2);
56 assertContains<RHS>(a2, 0);
57 LIBCPP_ASSERT(!a2.has_value());
59 assert(LHS::count == 0);
60 assert(RHS::count == 0);
64 void test_move_assign_empty() {
65 assert(LHS::count == 0);
70 assert(LHS::count == 1);
74 assert(LHS::count == 1 + a2.has_value());
75 LIBCPP_ASSERT(LHS::count == 1);
77 assertContains<LHS>(a, 1);
79 assertContains<LHS>(a2, 0);
80 LIBCPP_ASSERT(!a2.has_value());
82 assert(LHS::count == 0);
87 assert(LHS::count == 1);
91 assert(LHS::count == 0);
96 assert(LHS::count == 0);
99 void test_move_assign_noexcept() {
103 noexcept(a1 = std::move(a2))
104 , "any & operator=(any &&) must be noexcept"
109 test_move_assign_noexcept();
110 test_move_assign<small1, small2>();
111 test_move_assign<large1, large2>();
112 test_move_assign<small, large>();
113 test_move_assign<large, small>();
114 test_move_assign_empty<small>();
115 test_move_assign_empty<large>();