blob: ff7366993a2806baf491cb32ecbb4f1dc05da455 [file] [log] [blame]
Marshall Clow005c60b2016-04-07 14:20:31 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <vector>
11// vector<bool>
12
13// static void swap(reference x, reference y) noexcept;
14
15#include <vector>
16#include <cassert>
17
18int main()
19{
Marshall Clow56a0a432016-04-07 14:24:16 +000020
Marshall Clow005c60b2016-04-07 14:20:31 +000021 bool a[] = {false, true, false, true};
22 bool* an = a + sizeof(a)/sizeof(a[0]);
23
24 std::vector<bool> v(a, an);
25 std::vector<bool>::reference r1 = v[0];
26 std::vector<bool>::reference r2 = v[3];
Marshall Clow56a0a432016-04-07 14:24:16 +000027
28#if __has_feature(cxx_noexcept)
29 static_assert((noexcept(v.swap(r1,r2))), "");
30#endif
31
Marshall Clow005c60b2016-04-07 14:20:31 +000032 assert(!r1);
33 assert( r2);
34 v.swap(r1, r2);
35 assert( r1);
36 assert(!r2);
37}