10ab42057SMarshall Clow //===----------------------------------------------------------------------===//
20ab42057SMarshall Clow //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60ab42057SMarshall Clow //
70ab42057SMarshall Clow //===----------------------------------------------------------------------===//
80ab42057SMarshall Clow 
90ab42057SMarshall Clow // <vector>
100ab42057SMarshall Clow // vector<bool>
110ab42057SMarshall Clow 
120ab42057SMarshall Clow // static void swap(reference x, reference y) noexcept;
130ab42057SMarshall Clow 
140ab42057SMarshall Clow #include <vector>
150ab42057SMarshall Clow #include <cassert>
160ab42057SMarshall Clow 
17f2f2a639SEric Fiselier #include "test_macros.h"
18f2f2a639SEric Fiselier 
tests()19*c74059c5SNikolas Klauser TEST_CONSTEXPR_CXX20 bool tests()
200ab42057SMarshall Clow {
21f90ec0e8SMarshall Clow 
220ab42057SMarshall Clow     bool a[] = {false, true, false, true};
230ab42057SMarshall Clow     bool* an = a + sizeof(a)/sizeof(a[0]);
240ab42057SMarshall Clow 
250ab42057SMarshall Clow     std::vector<bool> v(a, an);
260ab42057SMarshall Clow     std::vector<bool>::reference r1 = v[0];
270ab42057SMarshall Clow     std::vector<bool>::reference r2 = v[3];
28f90ec0e8SMarshall Clow 
29f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
30f90ec0e8SMarshall Clow     static_assert((noexcept(v.swap(r1,r2))), "");
31f90ec0e8SMarshall Clow #endif
32f90ec0e8SMarshall Clow 
330ab42057SMarshall Clow     assert(!r1);
340ab42057SMarshall Clow     assert( r2);
350ab42057SMarshall Clow     v.swap(r1, r2);
360ab42057SMarshall Clow     assert( r1);
370ab42057SMarshall Clow     assert(!r2);
382df59c50SJF Bastien 
39*c74059c5SNikolas Klauser     return true;
40*c74059c5SNikolas Klauser }
41*c74059c5SNikolas Klauser 
main(int,char **)42*c74059c5SNikolas Klauser int main(int, char**)
43*c74059c5SNikolas Klauser {
44*c74059c5SNikolas Klauser     tests();
45*c74059c5SNikolas Klauser #if TEST_STD_VER > 17
46*c74059c5SNikolas Klauser     static_assert(tests());
47*c74059c5SNikolas Klauser #endif
482df59c50SJF Bastien     return 0;
490ab42057SMarshall Clow }
50