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 // <vector> 10 11 // reference& operator=(const reference&) 12 13 #include <cassert> 14 #include <vector> 15 16 bool test() { 17 std::vector<bool> vec; 18 typedef std::vector<bool>::reference Ref; 19 vec.push_back(true); 20 vec.push_back(false); 21 Ref ref1 = vec[0]; 22 Ref ref2 = vec[1]; 23 ref2 = ref1; 24 // Ref& 25 { 26 vec[0] = false; 27 vec[1] = true; 28 ref1 = ref2; 29 assert(vec[0]); 30 assert(vec[1]); 31 } 32 { 33 vec[0] = true; 34 vec[1] = false; 35 ref1 = ref2; 36 assert(!vec[0]); 37 assert(!vec[1]); 38 } 39 // Ref&& 40 { 41 vec[0] = false; 42 vec[1] = true; 43 ref1 = std::move(ref2); 44 assert(vec[0]); 45 assert(vec[1]); 46 } 47 { 48 vec[0] = true; 49 vec[1] = false; 50 ref1 = std::move(ref2); 51 assert(!vec[0]); 52 assert(!vec[1]); 53 } 54 // const Ref& 55 { 56 vec[0] = false; 57 vec[1] = true; 58 ref1 = static_cast<const Ref&>(ref2); 59 assert(vec[0]); 60 assert(vec[1]); 61 } 62 { 63 vec[0] = true; 64 vec[1] = false; 65 ref1 = static_cast<const Ref&>(ref2); 66 assert(!vec[0]); 67 assert(!vec[1]); 68 } 69 return true; 70 } 71 72 int main(int, char**) { 73 test(); 74 75 return 0; 76 } 77