emplace_back.pass.cpp revision 4e42dc97f3cf3e63ef3e6a23cada1970259eb7ea
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); 154e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow// return type is 'reference' in C++17; 'void' before 16198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow 17198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow#include <vector> 18198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow#include <cassert> 194e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#include "test_macros.h" 20061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 21198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow 22198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clowint main() 23198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow{ 24198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow { 25198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow typedef std::vector<bool> C; 26198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow C c; 274e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#if TEST_STD_VER > 14 284e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow typedef C::reference Ref; 293816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier Ref r1 = c.emplace_back(); 30198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 1); 31198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 323816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r1 = true; 333816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier assert(c.front() == true); 343816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r1 = false; 353816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier Ref r2 = c.emplace_back(true); 36198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 2); 37198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 38198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.back() == true); 393816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r2 = false; 403816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier assert(c.back() == false); 413816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r2 = true; 424e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#else 434e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow c.emplace_back(); 444e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.size() == 1); 454e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.front() == false); 464e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow c.emplace_back(true); 474e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.size() == 2); 484e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.front() == false); 494e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.back() == true); 504e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#endif 514e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow c.emplace_back(1 == 1); 52198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 3); 53198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 54198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c[1] == true); 55198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.back() == true); 56198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow } 57198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow { 58198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow typedef std::vector<bool, min_allocator<bool>> C; 59198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow C c; 6084acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier 614e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#if TEST_STD_VER > 14 624e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow typedef C::reference Ref; 633816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier Ref r1 = c.emplace_back(); 64198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 1); 65198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 663816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r1 = true; 673816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier assert(c.front() == true); 683816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r1 = false; 693816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier Ref r2 = c.emplace_back(true); 70198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 2); 71198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 72198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.back() == true); 733816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r2 = false; 743816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier assert(c.back() == false); 753816ef98b1665320bd5eba590c4906e9dbd070ccEric Fiselier r2 = true; 764e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#else 774e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow c.emplace_back(); 784e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.size() == 1); 794e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.front() == false); 804e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow c.emplace_back(true); 814e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.size() == 2); 824e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.front() == false); 834e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow assert(c.back() == true); 844e42dc97f3cf3e63ef3e6a23cada1970259eb7eaMarshall Clow#endif 85198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow c.emplace_back(1 == 1); 86198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.size() == 3); 87198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.front() == false); 88198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c[1] == true); 89198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow assert(c.back() == true); 90198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow } 91198a2a59ee8e99365c8d4ef6d5346e6743f58cb1Marshall Clow} 92