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 // <list>
11 
12 // iterator insert(const_iterator position, value_type&& x);
13 
14 #if _LIBCPP_DEBUG >= 1
15 #define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0))
16 #endif
17 
18 #include <list>
19 #include <cassert>
20 
21 #include "../../../MoveOnly.h"
22 #include "min_allocator.h"
23 
main()24 int main()
25 {
26 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
27     {
28     std::list<MoveOnly> l1;
29     l1.insert(l1.cend(), MoveOnly(1));
30     assert(l1.size() == 1);
31     assert(l1.front() == MoveOnly(1));
32     l1.insert(l1.cbegin(), MoveOnly(2));
33     assert(l1.size() == 2);
34     assert(l1.front() == MoveOnly(2));
35     assert(l1.back() == MoveOnly(1));
36     }
37 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
38 #if _LIBCPP_DEBUG >= 1
39     {
40         std::list<int> v1(3);
41         std::list<int> v2(3);
42         v1.insert(v2.begin(), 4);
43         assert(false);
44     }
45 #endif
46 #if __cplusplus >= 201103L
47 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
48     {
49     std::list<MoveOnly, min_allocator<MoveOnly>> l1;
50     l1.insert(l1.cend(), MoveOnly(1));
51     assert(l1.size() == 1);
52     assert(l1.front() == MoveOnly(1));
53     l1.insert(l1.cbegin(), MoveOnly(2));
54     assert(l1.size() == 2);
55     assert(l1.front() == MoveOnly(2));
56     assert(l1.back() == MoveOnly(1));
57     }
58 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
59 #if _LIBCPP_DEBUG >= 1
60     {
61         std::list<int, min_allocator<int>> v1(3);
62         std::list<int, min_allocator<int>> v2(3);
63         v1.insert(v2.begin(), 4);
64         assert(false);
65     }
66 #endif
67 #endif
68 }
69