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()
13b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant//        noexcept(is_nothrow_default_constructible<allocator_type>::value);
14b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant
15b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant// This tests a conforming extension
16b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant
17d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier// UNSUPPORTED: c++98, c++03
18d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier
19b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#include <forward_list>
20b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant#include <cassert>
21b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant
225078baa9e0475783a366e54da37cc9e58f386325Eric Fiselier#include "test_macros.h"
23df00d5e5ad672aa275a29c5a446072959134adddMarshall Clow#include "MoveOnly.h"
241b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h"
25b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant
26b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnanttemplate <class T>
27b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnantstruct some_alloc
28b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant{
29b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    typedef T value_type;
30b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    some_alloc(const some_alloc&);
31b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant};
32b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant
33b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnantint main()
34b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant{
355597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#if defined(_LIBCPP_VERSION)
36b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    {
37b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        typedef std::forward_list<MoveOnly> C;
385597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej        static_assert(std::is_nothrow_default_constructible<C>::value, "");
39b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    }
40b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    {
41b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        typedef std::forward_list<MoveOnly, test_allocator<MoveOnly>> C;
425597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej        static_assert(std::is_nothrow_default_constructible<C>::value, "");
43b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    }
445597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#endif // _LIBCPP_VERSION
45b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    {
46b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        typedef std::forward_list<MoveOnly, other_allocator<MoveOnly>> C;
47b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        static_assert(!std::is_nothrow_default_constructible<C>::value, "");
48b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    }
49b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    {
50b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        typedef std::forward_list<MoveOnly, some_alloc<MoveOnly>> C;
51b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant        static_assert(!std::is_nothrow_default_constructible<C>::value, "");
52b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant    }
53b965fed10bc47c74ed491717af082ecf5c8b815bHoward Hinnant}
54