1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <map>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class map
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class P>
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//   pair<iterator, bool> insert(P&& p);
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <map>
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include "../../../MoveOnly.h"
21ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#include "../../../min_allocator.h"
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::map<int, MoveOnly> M;
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::pair<M::iterator, bool> R;
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        M m;
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        R r = m.insert(M::value_type(2, 2));
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.second);
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first == m.begin());
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(m.size() == 1);
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 2);
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == 2);
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        r = m.insert(M::value_type(1, 1));
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.second);
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first == m.begin());
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(m.size() == 2);
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 1);
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == 1);
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        r = m.insert(M::value_type(3, 3));
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.second);
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first == prev(m.end()));
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(m.size() == 3);
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 3);
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == 3);
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        r = m.insert(M::value_type(3, 3));
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(!r.second);
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first == prev(m.end()));
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(m.size() == 3);
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->first == 3);
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(r.first->second == 3);
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
58ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L
59ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
60ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::map<int, MoveOnly, std::less<int>, min_allocator<std::pair<const int, MoveOnly>>> M;
61ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::pair<M::iterator, bool> R;
62ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        M m;
63ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        R r = m.insert(M::value_type(2, 2));
64ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.second);
65ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first == m.begin());
66ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(m.size() == 1);
67ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 2);
68ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == 2);
69ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
70ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        r = m.insert(M::value_type(1, 1));
71ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.second);
72ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first == m.begin());
73ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(m.size() == 2);
74ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 1);
75ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == 1);
76ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
77ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        r = m.insert(M::value_type(3, 3));
78ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.second);
79ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first == prev(m.end()));
80ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(m.size() == 3);
81ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 3);
82ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == 3);
83ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
84ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        r = m.insert(M::value_type(3, 3));
85ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(!r.second);
86ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first == prev(m.end()));
87ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(m.size() == 3);
88ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->first == 3);
89ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(r.first->second == 3);
90ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
91ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif
92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
94