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