100 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++1110// <vector>11// vector.bool12 13// template <class... Args> reference emplace_back(Args&&... args);14// return type is 'reference' in C++17; 'void' before15 16#include <vector>17#include <cassert>18#include "test_macros.h"19#include "min_allocator.h"20 21TEST_CONSTEXPR_CXX20 bool tests() {22 {23 typedef std::vector<bool> C;24 C c;25#if TEST_STD_VER > 1426 typedef C::reference Ref;27 Ref r1 = c.emplace_back();28 assert(c.size() == 1);29 assert(c.front() == false);30 r1 = true;31 assert(c.front() == true);32 r1 = false;33 Ref r2 = c.emplace_back(true);34 assert(c.size() == 2);35 assert(c.front() == false);36 assert(c.back() == true);37 r2 = false;38 assert(c.back() == false);39 r2 = true;40#else41 c.emplace_back();42 assert(c.size() == 1);43 assert(c.front() == false);44 c.emplace_back(true);45 assert(c.size() == 2);46 assert(c.front() == false);47 assert(c.back() == true);48#endif49 c.emplace_back(true);50 assert(c.size() == 3);51 assert(c.front() == false);52 assert(c[1] == true);53 assert(c.back() == true);54 }55 {56 typedef std::vector<bool, min_allocator<bool>> C;57 C c;58 59#if TEST_STD_VER > 1460 typedef C::reference Ref;61 Ref r1 = c.emplace_back();62 assert(c.size() == 1);63 assert(c.front() == false);64 r1 = true;65 assert(c.front() == true);66 r1 = false;67 Ref r2 = c.emplace_back(true);68 assert(c.size() == 2);69 assert(c.front() == false);70 assert(c.back() == true);71 r2 = false;72 assert(c.back() == false);73 r2 = true;74#else75 c.emplace_back();76 assert(c.size() == 1);77 assert(c.front() == false);78 c.emplace_back(true);79 assert(c.size() == 2);80 assert(c.front() == false);81 assert(c.back() == true);82#endif83 c.emplace_back(true);84 assert(c.size() == 3);85 assert(c.front() == false);86 assert(c[1] == true);87 assert(c.back() == true);88 }89 90 return true;91}92 93int main(int, char**) {94 tests();95#if TEST_STD_VER > 1796 static_assert(tests());97#endif98 return 0;99}100