1//===----------------------------------------------------------------------===// 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// <list> 11 12// list& operator=(list&& c) 13// noexcept( 14// allocator_type::propagate_on_container_move_assignment::value && 15// is_nothrow_move_assignable<allocator_type>::value); 16 17// This tests a conforming extension 18 19// UNSUPPORTED: c++98, c++03 20 21#include <list> 22#include <cassert> 23 24#include "test_macros.h" 25#include "MoveOnly.h" 26#include "test_allocator.h" 27 28template <class T> 29struct some_alloc 30{ 31 typedef T value_type; 32 some_alloc(const some_alloc&); 33}; 34 35int main() 36{ 37 { 38 typedef std::list<MoveOnly> C; 39 static_assert(std::is_nothrow_move_assignable<C>::value, ""); 40 } 41 { 42 typedef std::list<MoveOnly, test_allocator<MoveOnly>> C; 43 static_assert(!std::is_nothrow_move_assignable<C>::value, ""); 44 } 45#if defined(_LIBCPP_VERSION) 46 { 47 typedef std::list<MoveOnly, other_allocator<MoveOnly>> C; 48 static_assert(std::is_nothrow_move_assignable<C>::value, ""); 49 } 50 { 51 typedef std::list<MoveOnly, some_alloc<MoveOnly>> C; 52 static_assert(!std::is_nothrow_move_assignable<C>::value, ""); 53 } 54#endif // _LIBCPP_VERSION 55} 56