1c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant//===----------------------------------------------------------------------===// 2c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 3c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// The LLVM Compiler Infrastructure 4c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 5c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 7c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// 8c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant//===----------------------------------------------------------------------===// 9c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 10c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// <list> 11c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 12c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// list& operator=(list&& c) 13c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// noexcept( 14c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// allocator_type::propagate_on_container_move_assignment::value && 15c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// is_nothrow_move_assignable<allocator_type>::value); 16c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 17c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant// This tests a conforming extension 18c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 19d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier// UNSUPPORTED: c++98, c++03 20d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier 21c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include <list> 22c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include <cassert> 23c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 2403388d19d6b8ff1c95a2a57865b320ff13cd425dEric Fiselier#include "test_macros.h" 25df00d5e5ad672aa275a29c5a446072959134adddMarshall Clow#include "MoveOnly.h" 261b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 27c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 28c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnanttemplate <class T> 29c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantstruct some_alloc 30c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant{ 31c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant typedef T value_type; 32c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant some_alloc(const some_alloc&); 33c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant}; 34c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant 35c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantint main() 36c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant{ 37c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant { 38c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant typedef std::list<MoveOnly> C; 39c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant static_assert(std::is_nothrow_move_assignable<C>::value, ""); 40c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 41c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant { 42c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant typedef std::list<MoveOnly, test_allocator<MoveOnly>> C; 43c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant static_assert(!std::is_nothrow_move_assignable<C>::value, ""); 44c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 455597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#if defined(_LIBCPP_VERSION) 46c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant { 47c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant typedef std::list<MoveOnly, other_allocator<MoveOnly>> C; 485597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_assignable<C>::value, ""); 49c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 50c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant { 51c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant typedef std::list<MoveOnly, some_alloc<MoveOnly>> C; 525597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(!std::is_nothrow_move_assignable<C>::value, ""); 53c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant } 545597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#endif // _LIBCPP_VERSION 55c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant} 56