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 // <forward_list>
11
12 // void pop_front();
13
14 #include <forward_list>
15 #include <cassert>
16
17 #include "MoveOnly.h"
18 #include "min_allocator.h"
19
main()20 int main()
21 {
22 {
23 typedef int T;
24 typedef std::forward_list<T> C;
25 typedef std::forward_list<T> C;
26 C c;
27 c.push_front(1);
28 c.push_front(3);
29 c.pop_front();
30 assert(distance(c.begin(), c.end()) == 1);
31 assert(c.front() == 1);
32 c.pop_front();
33 assert(distance(c.begin(), c.end()) == 0);
34 }
35 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
36 {
37 typedef MoveOnly T;
38 typedef std::forward_list<T> C;
39 C c;
40 c.push_front(1);
41 c.push_front(3);
42 c.pop_front();
43 assert(distance(c.begin(), c.end()) == 1);
44 assert(c.front() == 1);
45 c.pop_front();
46 assert(distance(c.begin(), c.end()) == 0);
47 }
48 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
49 #if __cplusplus >= 201103L
50 {
51 typedef int T;
52 typedef std::forward_list<T, min_allocator<T>> C;
53 typedef std::forward_list<T, min_allocator<T>> C;
54 C c;
55 c.push_front(1);
56 c.push_front(3);
57 c.pop_front();
58 assert(distance(c.begin(), c.end()) == 1);
59 assert(c.front() == 1);
60 c.pop_front();
61 assert(distance(c.begin(), c.end()) == 0);
62 }
63 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
64 {
65 typedef MoveOnly T;
66 typedef std::forward_list<T, min_allocator<T>> C;
67 C c;
68 c.push_front(1);
69 c.push_front(3);
70 c.pop_front();
71 assert(distance(c.begin(), c.end()) == 1);
72 assert(c.front() == 1);
73 c.pop_front();
74 assert(distance(c.begin(), c.end()) == 0);
75 }
76 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
77 #endif
78 }
79