193f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant//===----------------------------------------------------------------------===// 293f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// 393f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// The LLVM Compiler Infrastructure 493f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// 593f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 693f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 793f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// 893f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant//===----------------------------------------------------------------------===// 993f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 1093f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// <deque> 1193f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 1293f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// deque(deque&&) 1393f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// noexcept(is_nothrow_move_constructible<allocator_type>::value); 1493f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 1593f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant// This tests a conforming extension 1693f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 1793f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant#include <deque> 1893f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant#include <cassert> 1993f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 2093f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant#include "../../../MoveOnly.h" 211b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 2293f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 2393f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnanttemplate <class T> 2493f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnantstruct some_alloc 2593f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant{ 2693f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant typedef T value_type; 2793f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant some_alloc(const some_alloc&); 2893f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant}; 2993f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant 3093f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnantint main() 3193f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant{ 3293f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant#if __has_feature(cxx_noexcept) 3393f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant { 3493f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant typedef std::deque<MoveOnly> C; 3593f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 3693f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant } 3793f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant { 3893f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant typedef std::deque<MoveOnly, test_allocator<MoveOnly>> C; 3993f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 4093f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant } 4193f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant { 4293f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant typedef std::deque<MoveOnly, other_allocator<MoveOnly>> C; 4393f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 4493f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant } 4593f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant { 4693f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant typedef std::deque<MoveOnly, some_alloc<MoveOnly>> C; 4793f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant static_assert(!std::is_nothrow_move_constructible<C>::value, ""); 4893f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant } 4993f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant#endif 5093f2764b165fdcf62f4424d919d4713c9d2dbab6Howard Hinnant} 51