1d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant//===----------------------------------------------------------------------===// 2d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// 3d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// The LLVM Compiler Infrastructure 4d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// 5d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 7d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// 8d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant//===----------------------------------------------------------------------===// 9d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 10d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// <vector> 11d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 12d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// vector(vector&&) 13d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// noexcept(is_nothrow_move_constructible<allocator_type>::value); 14d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 15d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant// This tests a conforming extension 16d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 17d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier// UNSUPPORTED: c++98, c++03 18d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier 19d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant#include <vector> 20d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant#include <cassert> 21d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 22a29e0e5ba2ad9a130fc712591da374e80cc7153eEric Fiselier#include "test_macros.h" 231b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 24d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 25d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnanttemplate <class T> 26d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnantstruct some_alloc 27d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant{ 28d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant typedef T value_type; 29d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant some_alloc(const some_alloc&); 30d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant}; 31d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant 32d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnantint main() 33d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant{ 345597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#if defined(_LIBCPP_VERSION) 35d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant { 36d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant typedef std::vector<bool> C; 375597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 38d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant } 39d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant { 40d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant typedef std::vector<bool, test_allocator<bool>> C; 415597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 42d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant } 43d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant { 44d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant typedef std::vector<bool, other_allocator<bool>> C; 455597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 46d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant } 475597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#endif // _LIBCPP_VERSION 48d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant { 49119ed479997f73f39aa0dc4ea5b5ca5ae36300fbMarshall Clow // In C++17, move constructors for allocators are not allowed to throw 50119ed479997f73f39aa0dc4ea5b5ca5ae36300fbMarshall Clow#if TEST_STD_VER > 14 515597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#if defined(_LIBCPP_VERSION) 525597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej typedef std::vector<bool, some_alloc<bool>> C; 535597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert( std::is_nothrow_move_constructible<C>::value, ""); 545597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#endif // _LIBCPP_VERSION 55119ed479997f73f39aa0dc4ea5b5ca5ae36300fbMarshall Clow#else 565597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej typedef std::vector<bool, some_alloc<bool>> C; 57d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant static_assert(!std::is_nothrow_move_constructible<C>::value, ""); 58119ed479997f73f39aa0dc4ea5b5ca5ae36300fbMarshall Clow#endif 59d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant } 60d1d27a4afaba2e3b708afd73f1533b7f8530008bHoward Hinnant} 61