1 //===----------------------------------------------------------------------===//
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 // <memory>
11 
12 // template <class OuterAlloc, class... InnerAllocs>
13 // class scoped_allocator_adaptor
14 //     : public OuterAlloc
15 // {
16 // public:
17 //     typedef OuterAlloc outer_allocator_type;
18 //     typedef typename OuterTraits::size_type size_type;
19 //     typedef typename OuterTraits::difference_type difference_type;
20 //     typedef typename OuterTraits::pointer pointer;
21 //     typedef typename OuterTraits::const_pointer const_pointer;
22 //     typedef typename OuterTraits::void_pointer void_pointer;
23 //     typedef typename OuterTraits::const_void_pointer const_void_pointer;
24 // };
25 
26 #include <scoped_allocator>
27 #include <type_traits>
28 
29 #include "allocators.h"
30 
31 int main()
32 {
33 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
34 
35     static_assert((std::is_base_of<
36         A1<int>,
37         std::scoped_allocator_adaptor<A1<int>>
38         >::value), "");
39 
40     static_assert((std::is_same<
41         std::scoped_allocator_adaptor<A1<int>>::outer_allocator_type,
42         A1<int>>::value), "");
43 
44     static_assert((std::is_same<
45         std::scoped_allocator_adaptor<A1<int>>::size_type,
46         std::make_unsigned<std::ptrdiff_t>::type>::value), "");
47 
48     static_assert((std::is_same<
49         std::scoped_allocator_adaptor<A1<int>>::difference_type,
50         std::ptrdiff_t>::value), "");
51 
52     static_assert((std::is_same<
53         std::scoped_allocator_adaptor<A1<int>>::pointer,
54         int*>::value), "");
55 
56     static_assert((std::is_same<
57         std::scoped_allocator_adaptor<A1<int>>::const_pointer,
58         const int*>::value), "");
59 
60     static_assert((std::is_same<
61         std::scoped_allocator_adaptor<A1<int>>::void_pointer,
62         void*>::value), "");
63 
64     static_assert((std::is_same<
65         std::scoped_allocator_adaptor<A1<int>>::const_void_pointer,
66         const void*>::value), "");
67 
68     static_assert((std::is_base_of<
69         A2<int>,
70         std::scoped_allocator_adaptor<A2<int>, A1<int>>
71         >::value), "");
72 
73     static_assert((std::is_same<
74         std::scoped_allocator_adaptor<A2<int>, A1<int>>::outer_allocator_type,
75         A2<int>>::value), "");
76 
77     static_assert((std::is_same<
78         std::scoped_allocator_adaptor<A2<int>, A1<int>>::size_type,
79         unsigned>::value), "");
80 
81     static_assert((std::is_same<
82         std::scoped_allocator_adaptor<A2<int>, A1<int>>::difference_type,
83         int>::value), "");
84 
85     static_assert((std::is_same<
86         std::scoped_allocator_adaptor<A2<int>, A1<int>>::pointer,
87         int*>::value), "");
88 
89     static_assert((std::is_same<
90         std::scoped_allocator_adaptor<A2<int>, A1<int>>::const_pointer,
91         const int*>::value), "");
92 
93     static_assert((std::is_same<
94         std::scoped_allocator_adaptor<A2<int>, A1<int>>::void_pointer,
95         void*>::value), "");
96 
97     static_assert((std::is_same<
98         std::scoped_allocator_adaptor<A2<int>, A1<int>>::const_void_pointer,
99         const void*>::value), "");
100 
101 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
102 }
103