xref: /minix3/external/bsd/libc++/dist/libcxx/test/containers/associative/set/emplace.pass.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
14684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
24684ddb6SLionel Sambuc //
34684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
44684ddb6SLionel Sambuc //
54684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
64684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
74684ddb6SLionel Sambuc //
84684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
94684ddb6SLionel Sambuc 
104684ddb6SLionel Sambuc // <set>
114684ddb6SLionel Sambuc 
124684ddb6SLionel Sambuc // class set
134684ddb6SLionel Sambuc 
144684ddb6SLionel Sambuc // template <class... Args>
154684ddb6SLionel Sambuc //   pair<iterator, bool> emplace(Args&&... args);
164684ddb6SLionel Sambuc 
174684ddb6SLionel Sambuc #include <set>
184684ddb6SLionel Sambuc #include <cassert>
194684ddb6SLionel Sambuc 
204684ddb6SLionel Sambuc #include "../../Emplaceable.h"
21*0a6a1f1dSLionel Sambuc #include "DefaultOnly.h"
22*0a6a1f1dSLionel Sambuc #include "min_allocator.h"
234684ddb6SLionel Sambuc 
main()244684ddb6SLionel Sambuc int main()
254684ddb6SLionel Sambuc {
264684ddb6SLionel Sambuc #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
274684ddb6SLionel Sambuc     {
284684ddb6SLionel Sambuc         typedef std::set<DefaultOnly> M;
294684ddb6SLionel Sambuc         typedef std::pair<M::iterator, bool> R;
304684ddb6SLionel Sambuc         M m;
314684ddb6SLionel Sambuc         assert(DefaultOnly::count == 0);
324684ddb6SLionel Sambuc         R r = m.emplace();
334684ddb6SLionel Sambuc         assert(r.second);
344684ddb6SLionel Sambuc         assert(r.first == m.begin());
354684ddb6SLionel Sambuc         assert(m.size() == 1);
364684ddb6SLionel Sambuc         assert(*m.begin() == DefaultOnly());
374684ddb6SLionel Sambuc         assert(DefaultOnly::count == 1);
384684ddb6SLionel Sambuc 
394684ddb6SLionel Sambuc         r = m.emplace();
404684ddb6SLionel Sambuc         assert(!r.second);
414684ddb6SLionel Sambuc         assert(r.first == m.begin());
424684ddb6SLionel Sambuc         assert(m.size() == 1);
434684ddb6SLionel Sambuc         assert(*m.begin() == DefaultOnly());
444684ddb6SLionel Sambuc         assert(DefaultOnly::count == 1);
454684ddb6SLionel Sambuc     }
464684ddb6SLionel Sambuc     assert(DefaultOnly::count == 0);
474684ddb6SLionel Sambuc     {
484684ddb6SLionel Sambuc         typedef std::set<Emplaceable> M;
494684ddb6SLionel Sambuc         typedef std::pair<M::iterator, bool> R;
504684ddb6SLionel Sambuc         M m;
514684ddb6SLionel Sambuc         R r = m.emplace();
524684ddb6SLionel Sambuc         assert(r.second);
534684ddb6SLionel Sambuc         assert(r.first == m.begin());
544684ddb6SLionel Sambuc         assert(m.size() == 1);
554684ddb6SLionel Sambuc         assert(*m.begin() == Emplaceable());
564684ddb6SLionel Sambuc         r = m.emplace(2, 3.5);
574684ddb6SLionel Sambuc         assert(r.second);
584684ddb6SLionel Sambuc         assert(r.first == next(m.begin()));
594684ddb6SLionel Sambuc         assert(m.size() == 2);
604684ddb6SLionel Sambuc         assert(*r.first == Emplaceable(2, 3.5));
614684ddb6SLionel Sambuc         r = m.emplace(2, 3.5);
624684ddb6SLionel Sambuc         assert(!r.second);
634684ddb6SLionel Sambuc         assert(r.first == next(m.begin()));
644684ddb6SLionel Sambuc         assert(m.size() == 2);
654684ddb6SLionel Sambuc         assert(*r.first == Emplaceable(2, 3.5));
664684ddb6SLionel Sambuc     }
674684ddb6SLionel Sambuc     {
684684ddb6SLionel Sambuc         typedef std::set<int> M;
694684ddb6SLionel Sambuc         typedef std::pair<M::iterator, bool> R;
704684ddb6SLionel Sambuc         M m;
714684ddb6SLionel Sambuc         R r = m.emplace(M::value_type(2));
724684ddb6SLionel Sambuc         assert(r.second);
734684ddb6SLionel Sambuc         assert(r.first == m.begin());
744684ddb6SLionel Sambuc         assert(m.size() == 1);
754684ddb6SLionel Sambuc         assert(*r.first == 2);
764684ddb6SLionel Sambuc     }
774684ddb6SLionel Sambuc #if __cplusplus >= 201103L
784684ddb6SLionel Sambuc     {
794684ddb6SLionel Sambuc         typedef std::set<int, std::less<int>, min_allocator<int>> M;
804684ddb6SLionel Sambuc         typedef std::pair<M::iterator, bool> R;
814684ddb6SLionel Sambuc         M m;
824684ddb6SLionel Sambuc         R r = m.emplace(M::value_type(2));
834684ddb6SLionel Sambuc         assert(r.second);
844684ddb6SLionel Sambuc         assert(r.first == m.begin());
854684ddb6SLionel Sambuc         assert(m.size() == 1);
864684ddb6SLionel Sambuc         assert(*r.first == 2);
874684ddb6SLionel Sambuc     }
884684ddb6SLionel Sambuc #endif
894684ddb6SLionel Sambuc #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
904684ddb6SLionel Sambuc }
91