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