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// void swap(forward_list& c) 13b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant// noexcept(!allocator_type::propagate_on_container_swap::value || 14b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant// __is_nothrow_swappable<allocator_type>::value); 15b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 16b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant// This tests a conforming extension 17b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 18b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#include <forward_list> 19b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#include <cassert> 20b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 215cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert#include "MoveOnly.h" 221b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 23b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 24b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnanttemplate <class T> 25b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnantstruct some_alloc 26b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant{ 27b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef T value_type; 28b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 29b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant some_alloc() {} 30b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant some_alloc(const some_alloc&); 31b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant void deallocate(void*, unsigned) {} 32b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 33b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef std::true_type propagate_on_container_swap; 34b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant}; 35b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant 36b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnantint main() 37b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant{ 38b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#if __has_feature(cxx_noexcept) 39b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant { 40b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef std::forward_list<MoveOnly> C; 41b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant C c1, c2; 42b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant static_assert(noexcept(swap(c1, c2)), ""); 43b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant } 44b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant { 45b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef std::forward_list<MoveOnly, test_allocator<MoveOnly>> C; 46b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant C c1, c2; 47b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant static_assert(noexcept(swap(c1, c2)), ""); 48b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant } 49b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant { 50b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef std::forward_list<MoveOnly, other_allocator<MoveOnly>> C; 51b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant C c1, c2; 52b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant static_assert(noexcept(swap(c1, c2)), ""); 53b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant } 54b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant { 55b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant typedef std::forward_list<MoveOnly, some_alloc<MoveOnly>> C; 56b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant C c1, c2; 57b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant static_assert(!noexcept(swap(c1, c2)), ""); 58b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant } 59b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#endif 60b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant} 61