1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <forward_list>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class T, class Allocator>
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//     void swap(forward_list<T, Allocator>& x, forward_list<T, Allocator>& y);
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <forward_list>
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
181b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h"
19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_allocator<T> A;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(std::begin(t1), std::end(t1), A(1));
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t2[] = {10, 11, 12};
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(std::begin(t2), std::end(t2), A(2));
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 0) == 10);
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 1) == 11);
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 2) == 12);
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(1));
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 0) == 0);
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 1) == 1);
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 2) == 2);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 3) == 3);
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 4) == 4);
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 5) == 5);
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(2));
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_allocator<T> A;
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(std::begin(t1), std::end(t1), A(1));
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(A(2));
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(1));
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 0) == 0);
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 1) == 1);
63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 2) == 2);
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 3) == 3);
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 4) == 4);
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 5) == 5);
67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(2));
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_allocator<T> A;
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(A(1));
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t2[] = {10, 11, 12};
75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(std::begin(t2), std::end(t2), A(2));
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 0) == 10);
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 1) == 11);
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 2) == 12);
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(1));
83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(2));
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef test_allocator<T> A;
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(A(1));
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(A(2));
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(1));
97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(2));
100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef other_allocator<T> A;
105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(std::begin(t1), std::end(t1), A(1));
108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t2[] = {10, 11, 12};
109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(std::begin(t2), std::end(t2), A(2));
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 0) == 10);
114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 1) == 11);
115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 2) == 12);
116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(2));
117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 0) == 0);
120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 1) == 1);
121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 2) == 2);
122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 3) == 3);
123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 4) == 4);
124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 5) == 5);
125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(1));
126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef other_allocator<T> A;
130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(std::begin(t1), std::end(t1), A(1));
133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(A(2));
134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(2));
138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 0) == 0);
141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 1) == 1);
142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 2) == 2);
143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 3) == 3);
144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 4) == 4);
145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c2.begin(), 5) == 5);
146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(1));
147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef other_allocator<T> A;
151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(A(1));
153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const T t2[] = {10, 11, 12};
154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(std::begin(t2), std::end(t2), A(2));
155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 0) == 10);
159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 1) == 11);
160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(*next(c1.begin(), 2) == 12);
161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(2));
162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(1));
165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef int T;
168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef other_allocator<T> A;
169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef std::forward_list<T, A> C;
170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c1(A(1));
171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        C c2(A(2));
172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        swap(c1, c2);
173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c1.get_allocator() == A(2));
176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(c2.get_allocator() == A(1));
179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
18081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#if __cplusplus >= 201103L
18181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    {
18281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef int T;
18381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef min_allocator<T> A;
18481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef std::forward_list<T, A> C;
18581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
18681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c1(std::begin(t1), std::end(t1), A());
18781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        const T t2[] = {10, 11, 12};
18881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c2(std::begin(t2), std::end(t2), A());
18981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        swap(c1, c2);
19081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
19181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
19281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 0) == 10);
19381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 1) == 11);
19481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 2) == 12);
19581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c1.get_allocator() == A());
19681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
19781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
19881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 0) == 0);
19981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 1) == 1);
20081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 2) == 2);
20181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 3) == 3);
20281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 4) == 4);
20381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 5) == 5);
20481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c2.get_allocator() == A());
20581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    }
20681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    {
20781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef int T;
20881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef min_allocator<T> A;
20981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef std::forward_list<T, A> C;
21081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        const T t1[] = {0, 1, 2, 3, 4, 5};
21181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c1(std::begin(t1), std::end(t1), A());
21281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c2(A{});
21381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        swap(c1, c2);
21481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
21581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
21681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c1.get_allocator() == A());
21781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
21881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c2.begin(), c2.end()) == 6);
21981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 0) == 0);
22081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 1) == 1);
22181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 2) == 2);
22281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 3) == 3);
22381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 4) == 4);
22481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c2.begin(), 5) == 5);
22581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c2.get_allocator() == A());
22681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    }
22781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    {
22881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef int T;
22981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef min_allocator<T> A;
23081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef std::forward_list<T, A> C;
23181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c1(A{});
23281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        const T t2[] = {10, 11, 12};
23381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c2(std::begin(t2), std::end(t2), A());
23481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        swap(c1, c2);
23581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
23681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c1.begin(), c1.end()) == 3);
23781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 0) == 10);
23881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 1) == 11);
23981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(*next(c1.begin(), 2) == 12);
24081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c1.get_allocator() == A());
24181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
24281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
24381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c2.get_allocator() == A());
24481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    }
24581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    {
24681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef int T;
24781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef min_allocator<T> A;
24881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        typedef std::forward_list<T, A> C;
24981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c1(A{});
25081381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        C c2(A{});
25181381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        swap(c1, c2);
25281381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
25381381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c1.begin(), c1.end()) == 0);
25481381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c1.get_allocator() == A());
25581381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant
25681381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(distance(c2.begin(), c2.end()) == 0);
25781381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant        assert(c2.get_allocator() == A());
25881381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant    }
25981381a932fbebb384adfe5c0116d45b37479efdeHoward Hinnant#endif
260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
261