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