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