blob: 5f5411b63e85bbd5154c3d67f4d1d3e2b7cf4663 [file] [log] [blame]
Eric Fiselier257fd692016-05-07 01:04:55 +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// UNSUPPORTED: c++98, c++03
11
12// <experimental/memory_resource>
13
14// template <class T> class polymorphic_allocator
15
16// memory_resource *
17// polymorphic_allocator<T>::resource() const
18
19#include <experimental/memory_resource>
20#include <type_traits>
21#include <cassert>
22
23namespace ex = std::experimental::pmr;
24
25int main()
26{
27 typedef ex::polymorphic_allocator<void> A;
28 {
29 A const a;
30 static_assert(
31 std::is_same<decltype(a.resource()), ex::memory_resource*>::value
32 , ""
33 );
34 }
35 {
36 ex::memory_resource * mptr = (ex::memory_resource*)42;
37 A const a(mptr);
38 assert(a.resource() == mptr);
39 }
40 {
41 A const a(nullptr);
42 assert(a.resource() == nullptr);
43 assert(a.resource() == nullptr);
44 }
45 {
46 A const a;
47 assert(a.resource() == ex::get_default_resource());
48 }
49 {
50 ex::memory_resource * mptr = (ex::memory_resource*)42;
51 ex::set_default_resource(mptr);
52 A const a;
53 assert(a.resource() == mptr);
54 assert(a.resource() == ex::get_default_resource());
55 }
56}