1005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//===----------------------------------------------------------------------===//
2005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//
3005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//                     The LLVM Compiler Infrastructure
4005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//
5005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
6005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow// Source Licenses. See LICENSE.TXT for details.
7005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//
8005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow//===----------------------------------------------------------------------===//
9005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow
10005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow// <vector>
11005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow// vector<bool>
12005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow
13005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow// static void swap(reference x, reference y) noexcept;
14005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow
15005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow#include <vector>
16005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow#include <cassert>
17005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow
18d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier#include "test_macros.h"
19d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier
20005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clowint main()
21005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow{
2256a0a437b7685fe2e43e89149f4f2f9447a6b17aMarshall Clow
23005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow    bool a[] = {false, true, false, true};
24005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow    bool* an = a + sizeof(a)/sizeof(a[0]);
25005c60b6662440b1ea9d2ab7505948e2bfc87fe0Marshall Clow
26a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    std::vector<bool> v(a, an);
27a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    std::vector<bool>::reference r1 = v[0];
28a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    std::vector<bool>::reference r2 = v[3];
2956a0a437b7685fe2e43e89149f4f2f9447a6b17aMarshall Clow
30d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier#if TEST_STD_VER >= 11
3156a0a437b7685fe2e43e89149f4f2f9447a6b17aMarshall Clow    static_assert((noexcept(v.swap(r1,r2))), "");
3256a0a437b7685fe2e43e89149f4f2f9447a6b17aMarshall Clow#endif
3356a0a437b7685fe2e43e89149f4f2f9447a6b17aMarshall Clow
34a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    assert(!r1);
35a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    assert( r2);
36a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    v.swap(r1, r2);
37a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    assert( r1);
38a686caad209c0475fd69346fe841ebb67a6eb06eStephan T. Lavavej    assert(!r2);
39d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier}
40