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