1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11 10 // <vector> 11 // vector.bool 12 13 // template <class... Args> reference emplace_back(Args&&... args); 14 // return type is 'reference' in C++17; 'void' before 15 16 #include <vector> 17 #include <cassert> 18 #include "test_macros.h" 19 #include "min_allocator.h" 20 tests()21TEST_CONSTEXPR_CXX20 bool tests() 22 { 23 { 24 typedef std::vector<bool> C; 25 C c; 26 #if TEST_STD_VER > 14 27 typedef C::reference Ref; 28 Ref r1 = c.emplace_back(); 29 assert(c.size() == 1); 30 assert(c.front() == false); 31 r1 = true; 32 assert(c.front() == true); 33 r1 = false; 34 Ref r2 = c.emplace_back(true); 35 assert(c.size() == 2); 36 assert(c.front() == false); 37 assert(c.back() == true); 38 r2 = false; 39 assert(c.back() == false); 40 r2 = true; 41 #else 42 c.emplace_back(); 43 assert(c.size() == 1); 44 assert(c.front() == false); 45 c.emplace_back(true); 46 assert(c.size() == 2); 47 assert(c.front() == false); 48 assert(c.back() == true); 49 #endif 50 c.emplace_back(true); 51 assert(c.size() == 3); 52 assert(c.front() == false); 53 assert(c[1] == true); 54 assert(c.back() == true); 55 } 56 { 57 typedef std::vector<bool, min_allocator<bool>> C; 58 C c; 59 60 #if TEST_STD_VER > 14 61 typedef C::reference Ref; 62 Ref r1 = c.emplace_back(); 63 assert(c.size() == 1); 64 assert(c.front() == false); 65 r1 = true; 66 assert(c.front() == true); 67 r1 = false; 68 Ref r2 = c.emplace_back(true); 69 assert(c.size() == 2); 70 assert(c.front() == false); 71 assert(c.back() == true); 72 r2 = false; 73 assert(c.back() == false); 74 r2 = true; 75 #else 76 c.emplace_back(); 77 assert(c.size() == 1); 78 assert(c.front() == false); 79 c.emplace_back(true); 80 assert(c.size() == 2); 81 assert(c.front() == false); 82 assert(c.back() == true); 83 #endif 84 c.emplace_back(true); 85 assert(c.size() == 3); 86 assert(c.front() == false); 87 assert(c[1] == true); 88 assert(c.back() == true); 89 } 90 91 return true; 92 } 93 main(int,char **)94int main(int, char**) 95 { 96 tests(); 97 #if TEST_STD_VER > 17 98 static_assert(tests()); 99 #endif 100 return 0; 101 } 102