emplace_back.pass.cpp revision 3816ef98b1665320bd5eba590c4906e9dbd070cc
1198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//===----------------------------------------------------------------------===//
2198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//
3198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//                     The LLVM Compiler Infrastructure
4198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//
5198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
6198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow// Source Licenses. See LICENSE.TXT for details.
7198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//
8198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//===----------------------------------------------------------------------===//
9198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow
10a3eac518e64aa0230894e4dde26c3f9714609e64Asiri Rathnayake// UNSUPPORTED: c++98, c++03, c++11
11198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow// <vector>
12198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow//  vector.bool
13198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow
143816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier// template <class... Args> reference emplace_back(Args&&... args);
15198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow
16198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow#include <vector>
17198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow#include <cassert>
18061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h"
19198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow
20198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clowint main()
21198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow{
22198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow    {
23198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        typedef std::vector<bool> C;
243816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        typedef C::reference Ref;
25198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        C c;
263816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        Ref r1 = c.emplace_back();
27198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 1);
28198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
293816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r1 = true;
303816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        assert(c.front() == true);
313816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r1 = false;
323816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        Ref r2 = c.emplace_back(true);
33198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 2);
34198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
35198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.back() == true);
363816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r2 = false;
373816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        assert(c.back() == false);
383816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r2 = true;
393816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        Ref r3 = c.emplace_back(1 == 1);
40198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 3);
41198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
42198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c[1] == true);
43198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.back() == true);
443816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r3 = false;
453816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        assert(c.back() == false);
46198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow    }
47198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow    {
48198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        typedef std::vector<bool, min_allocator<bool>> C;
493816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        typedef C::reference Ref;
50198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        C c;
5184acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier
523816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        Ref r1 = c.emplace_back();
53198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 1);
54198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
553816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r1 = true;
563816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        assert(c.front() == true);
573816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r1 = false;
583816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        Ref r2 = c.emplace_back(true);
59198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 2);
60198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
61198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.back() == true);
623816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r2 = false;
633816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        assert(c.back() == false);
643816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier        r2 = true;
65198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        c.emplace_back(1 == 1);
66198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.size() == 3);
67198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.front() == false);
68198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c[1] == true);
69198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow        assert(c.back() == true);
70198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow    }
71198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow}
72