allocator_pointers.pass.cpp (5611B)
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 #include <memory> 11 #include <cassert> 12 13 #include "test_macros.h" 14 15 #if TEST_STD_VER >= 11 16 // #include <memory> 17 // 18 // template <class Alloc> 19 // struct allocator_traits 20 // { 21 // typedef Alloc allocator_type; 22 // typedef typename allocator_type::value_type 23 // value_type; 24 // 25 // typedef Alloc::pointer | value_type* pointer; 26 // typedef Alloc::const_pointer 27 // | pointer_traits<pointer>::rebind<const value_type> 28 // const_pointer; 29 // typedef Alloc::void_pointer 30 // | pointer_traits<pointer>::rebind<void> 31 // void_pointer; 32 // typedef Alloc::const_void_pointer 33 // | pointer_traits<pointer>::rebind<const void> 34 // const_void_pointer; 35 36 template <typename Alloc> 37 void test_pointer() 38 { 39 typename std::allocator_traits<Alloc>::pointer vp; 40 typename std::allocator_traits<Alloc>::const_pointer cvp; 41 42 ((void)vp); // Prevent unused warning 43 ((void)cvp); // Prevent unused warning 44 45 static_assert(std::is_same<bool, decltype( vp == vp)>::value, ""); 46 static_assert(std::is_same<bool, decltype( vp != vp)>::value, ""); 47 static_assert(std::is_same<bool, decltype( vp > vp)>::value, ""); 48 static_assert(std::is_same<bool, decltype( vp >= vp)>::value, ""); 49 static_assert(std::is_same<bool, decltype( vp < vp)>::value, ""); 50 static_assert(std::is_same<bool, decltype( vp <= vp)>::value, ""); 51 52 static_assert(std::is_same<bool, decltype( vp == cvp)>::value, ""); 53 static_assert(std::is_same<bool, decltype(cvp == vp)>::value, ""); 54 static_assert(std::is_same<bool, decltype( vp != cvp)>::value, ""); 55 static_assert(std::is_same<bool, decltype(cvp != vp)>::value, ""); 56 static_assert(std::is_same<bool, decltype( vp > cvp)>::value, ""); 57 static_assert(std::is_same<bool, decltype(cvp > vp)>::value, ""); 58 static_assert(std::is_same<bool, decltype( vp >= cvp)>::value, ""); 59 static_assert(std::is_same<bool, decltype(cvp >= vp)>::value, ""); 60 static_assert(std::is_same<bool, decltype( vp < cvp)>::value, ""); 61 static_assert(std::is_same<bool, decltype(cvp < vp)>::value, ""); 62 static_assert(std::is_same<bool, decltype( vp <= cvp)>::value, ""); 63 static_assert(std::is_same<bool, decltype(cvp <= vp)>::value, ""); 64 65 static_assert(std::is_same<bool, decltype(cvp == cvp)>::value, ""); 66 static_assert(std::is_same<bool, decltype(cvp != cvp)>::value, ""); 67 static_assert(std::is_same<bool, decltype(cvp > cvp)>::value, ""); 68 static_assert(std::is_same<bool, decltype(cvp >= cvp)>::value, ""); 69 static_assert(std::is_same<bool, decltype(cvp < cvp)>::value, ""); 70 static_assert(std::is_same<bool, decltype(cvp <= cvp)>::value, ""); 71 } 72 73 template <typename Alloc> 74 void test_void_pointer() 75 { 76 typename std::allocator_traits<Alloc>::void_pointer vp; 77 typename std::allocator_traits<Alloc>::const_void_pointer cvp; 78 79 ((void)vp); // Prevent unused warning 80 ((void)cvp); // Prevent unused warning 81 82 static_assert(std::is_same<bool, decltype( vp == vp)>::value, ""); 83 static_assert(std::is_same<bool, decltype( vp != vp)>::value, ""); 84 static_assert(std::is_same<bool, decltype( vp > vp)>::value, ""); 85 static_assert(std::is_same<bool, decltype( vp >= vp)>::value, ""); 86 static_assert(std::is_same<bool, decltype( vp < vp)>::value, ""); 87 static_assert(std::is_same<bool, decltype( vp <= vp)>::value, ""); 88 89 static_assert(std::is_same<bool, decltype( vp == cvp)>::value, ""); 90 static_assert(std::is_same<bool, decltype(cvp == vp)>::value, ""); 91 static_assert(std::is_same<bool, decltype( vp != cvp)>::value, ""); 92 static_assert(std::is_same<bool, decltype(cvp != vp)>::value, ""); 93 static_assert(std::is_same<bool, decltype( vp > cvp)>::value, ""); 94 static_assert(std::is_same<bool, decltype(cvp > vp)>::value, ""); 95 static_assert(std::is_same<bool, decltype( vp >= cvp)>::value, ""); 96 static_assert(std::is_same<bool, decltype(cvp >= vp)>::value, ""); 97 static_assert(std::is_same<bool, decltype( vp < cvp)>::value, ""); 98 static_assert(std::is_same<bool, decltype(cvp < vp)>::value, ""); 99 static_assert(std::is_same<bool, decltype( vp <= cvp)>::value, ""); 100 static_assert(std::is_same<bool, decltype(cvp <= vp)>::value, ""); 101 102 static_assert(std::is_same<bool, decltype(cvp == cvp)>::value, ""); 103 static_assert(std::is_same<bool, decltype(cvp != cvp)>::value, ""); 104 static_assert(std::is_same<bool, decltype(cvp > cvp)>::value, ""); 105 static_assert(std::is_same<bool, decltype(cvp >= cvp)>::value, ""); 106 static_assert(std::is_same<bool, decltype(cvp < cvp)>::value, ""); 107 static_assert(std::is_same<bool, decltype(cvp <= cvp)>::value, ""); 108 } 109 110 struct Foo { int x; }; 111 112 int main() 113 { 114 test_pointer<std::allocator<char>> (); 115 test_pointer<std::allocator<int>> (); 116 test_pointer<std::allocator<Foo>> (); 117 118 test_void_pointer<std::allocator<char>> (); 119 test_void_pointer<std::allocator<int>> (); 120 test_void_pointer<std::allocator<Foo>> (); 121 } 122 #else 123 int main() {} 124 #endif