15d2b8fa1SNikolas Klauser //===----------------------------------------------------------------------===// 25d2b8fa1SNikolas Klauser // 35d2b8fa1SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45d2b8fa1SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 55d2b8fa1SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65d2b8fa1SNikolas Klauser // 75d2b8fa1SNikolas Klauser //===----------------------------------------------------------------------===// 85d2b8fa1SNikolas Klauser 95d2b8fa1SNikolas Klauser // <vector> 105d2b8fa1SNikolas Klauser 115d2b8fa1SNikolas Klauser // reference& operator=(bool) 125d2b8fa1SNikolas Klauser 135d2b8fa1SNikolas Klauser #include <cassert> 145d2b8fa1SNikolas Klauser #include <vector> 155d2b8fa1SNikolas Klauser 16fb9646edSNikolas Klauser #include "test_macros.h" 17fb9646edSNikolas Klauser test()18*98d3d5b5SNikolas KlauserTEST_CONSTEXPR_CXX20 bool test() { 195d2b8fa1SNikolas Klauser std::vector<bool> vec; 205d2b8fa1SNikolas Klauser typedef std::vector<bool>::reference Ref; 215d2b8fa1SNikolas Klauser vec.push_back(true); 225d2b8fa1SNikolas Klauser vec.push_back(false); 235d2b8fa1SNikolas Klauser Ref ref = vec[0]; 245d2b8fa1SNikolas Klauser const Ref cref = vec[0]; 255d2b8fa1SNikolas Klauser 265d2b8fa1SNikolas Klauser assert(ref); 275d2b8fa1SNikolas Klauser ref = false; 285d2b8fa1SNikolas Klauser assert(!vec[0]); 295d2b8fa1SNikolas Klauser assert(!vec[1]); 305d2b8fa1SNikolas Klauser ref = true; 315d2b8fa1SNikolas Klauser assert(vec[0]); 325d2b8fa1SNikolas Klauser assert(!vec[1]); 335d2b8fa1SNikolas Klauser 345d2b8fa1SNikolas Klauser assert(cref); 355d2b8fa1SNikolas Klauser 36fb9646edSNikolas Klauser #if TEST_STD_VER > 20 37fb9646edSNikolas Klauser cref = false; 38fb9646edSNikolas Klauser assert(!vec[0]); 39fb9646edSNikolas Klauser assert(!vec[1]); 40fb9646edSNikolas Klauser cref = true; 41fb9646edSNikolas Klauser assert(vec[0]); 42fb9646edSNikolas Klauser assert(!vec[1]); 43fb9646edSNikolas Klauser #endif 44fb9646edSNikolas Klauser 455d2b8fa1SNikolas Klauser return true; 465d2b8fa1SNikolas Klauser } 475d2b8fa1SNikolas Klauser main(int,char **)485d2b8fa1SNikolas Klauserint main(int, char**) { 495d2b8fa1SNikolas Klauser test(); 50*98d3d5b5SNikolas Klauser #if TEST_STD_VER > 17 51*98d3d5b5SNikolas Klauser static_assert(test()); 52*98d3d5b5SNikolas Klauser #endif 535d2b8fa1SNikolas Klauser 545d2b8fa1SNikolas Klauser return 0; 555d2b8fa1SNikolas Klauser } 56