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