blob: 1f11fc9582edf00dff2814be4d6d5d64fecd18b4 [file] [log] [blame]
Howard Hinnant7686add2011-06-04 14:31:57 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <map>
11
12// map()
13// noexcept(
14// is_nothrow_default_constructible<allocator_type>::value &&
15// is_nothrow_default_constructible<key_compare>::value &&
16// is_nothrow_copy_constructible<key_compare>::value);
17
18// This tests a conforming extension
19
20#include <map>
21#include <cassert>
22
Marshall Clowdf00d5e2015-01-28 21:22:53 +000023#include "MoveOnly.h"
Marshall Clow1b921882013-12-03 00:18:10 +000024#include "test_allocator.h"
Howard Hinnant7686add2011-06-04 14:31:57 +000025
26template <class T>
27struct some_comp
28{
29 typedef T value_type;
30 some_comp();
31};
32
33int main()
34{
35#if __has_feature(cxx_noexcept)
36 {
37 typedef std::map<MoveOnly, MoveOnly> C;
38 static_assert(std::is_nothrow_default_constructible<C>::value, "");
39 }
40 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070041 typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
Howard Hinnant7686add2011-06-04 14:31:57 +000042 static_assert(std::is_nothrow_default_constructible<C>::value, "");
43 }
44 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070045 typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
Howard Hinnant7686add2011-06-04 14:31:57 +000046 static_assert(!std::is_nothrow_default_constructible<C>::value, "");
47 }
48 {
49 typedef std::map<MoveOnly, MoveOnly, some_comp<MoveOnly>> C;
50 static_assert(!std::is_nothrow_default_constructible<C>::value, "");
51 }
52#endif
53}