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 // template <class... Args> void emplace_front(Args&&... args);
13 
14 #include <forward_list>
15 #include <cassert>
16 
17 #include "../../../Emplaceable.h"
18 #include "../../../min_allocator.h"
19 
20 int main()
21 {
22 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
23     {
24         typedef Emplaceable T;
25         typedef std::forward_list<T> C;
26         C c;
27         c.emplace_front();
28         assert(c.front() == Emplaceable());
29         assert(distance(c.begin(), c.end()) == 1);
30         c.emplace_front(1, 2.5);
31         assert(c.front() == Emplaceable(1, 2.5));
32         assert(*next(c.begin()) == Emplaceable());
33         assert(distance(c.begin(), c.end()) == 2);
34     }
35 #if __cplusplus >= 201103L
36     {
37         typedef Emplaceable T;
38         typedef std::forward_list<T, min_allocator<T>> C;
39         C c;
40         c.emplace_front();
41         assert(c.front() == Emplaceable());
42         assert(distance(c.begin(), c.end()) == 1);
43         c.emplace_front(1, 2.5);
44         assert(c.front() == Emplaceable(1, 2.5));
45         assert(*next(c.begin()) == Emplaceable());
46         assert(distance(c.begin(), c.end()) == 2);
47     }
48 #endif
49 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
50 }
51