copy.pass.cpp revision ebedffde9adff4b56d3ccf6adcee8dc092404f0e
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// <memory>
11
12// template <class OuterAlloc, class... InnerAllocs>
13//   class scoped_allocator_adaptor
14
15// scoped_allocator_adaptor(const scoped_allocator_adaptor& other);
16
17#include <scoped_allocator>
18#include <cassert>
19
20#include "allocators.h"
21
22int main()
23{
24#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
25
26    {
27        typedef std::scoped_allocator_adaptor<A1<int>> A;
28        A a1(A1<int>(3));
29        A1<int>::copy_called = false;
30        A1<int>::move_called = false;
31        A a2 = a1;
32        assert(A1<int>::copy_called == true);
33        assert(A1<int>::move_called == false);
34        assert(a2 == a1);
35    }
36    {
37        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>> A;
38        A a1(A1<int>(4), A2<int>(5));
39        A1<int>::copy_called = false;
40        A1<int>::move_called = false;
41        A2<int>::copy_called = false;
42        A2<int>::move_called = false;
43        A a2 = a1;
44        assert(A1<int>::copy_called == true);
45        assert(A1<int>::move_called == false);
46        assert(A2<int>::copy_called == true);
47        assert(A2<int>::move_called == false);
48        assert(a2 == a1);
49    }
50    {
51        typedef std::scoped_allocator_adaptor<A1<int>, A2<int>, A3<int>> A;
52        A a1(A1<int>(4), A2<int>(5), A3<int>(6));
53        A1<int>::copy_called = false;
54        A1<int>::move_called = false;
55        A2<int>::copy_called = false;
56        A2<int>::move_called = false;
57        A3<int>::copy_called = false;
58        A3<int>::move_called = false;
59        A a2 = a1;
60        assert(A1<int>::copy_called == true);
61        assert(A1<int>::move_called == false);
62        assert(A2<int>::copy_called == true);
63        assert(A2<int>::move_called == false);
64        assert(A3<int>::copy_called == true);
65        assert(A3<int>::move_called == false);
66        assert(a2 == a1);
67    }
68
69#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
70}
71