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
19c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include <list>
20c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include <cassert>
21c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant
22c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#include "../../../MoveOnly.h"
231b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h"
24c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant
25c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnanttemplate <class T>
26c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantstruct some_alloc
27c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant{
28c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    typedef T value_type;
29c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    some_alloc(const some_alloc&);
30c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant};
31c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant
32c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnantint main()
33c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant{
34c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#if __has_feature(cxx_noexcept)
35c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    {
36c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        typedef std::list<MoveOnly> C;
37c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        static_assert(std::is_nothrow_move_assignable<C>::value, "");
38c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    }
39c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    {
40c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        typedef std::list<MoveOnly, test_allocator<MoveOnly>> C;
41c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        static_assert(!std::is_nothrow_move_assignable<C>::value, "");
42c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    }
43c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    {
44c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        typedef std::list<MoveOnly, other_allocator<MoveOnly>> C;
45c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        static_assert(std::is_nothrow_move_assignable<C>::value, "");
46c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    }
47c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    {
48c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        typedef std::list<MoveOnly, some_alloc<MoveOnly>> C;
49c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant        static_assert(!std::is_nothrow_move_assignable<C>::value, "");
50c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant    }
51c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant#endif
52c560727d5e847f2628dc1246c1d35c4d9949389fHoward Hinnant}
53