Noticed that std::allocator<const T> was missing the definition for is_always_equal...
authorMarshall Clow <mclow.lists@gmail.com>
Wed, 1 Jul 2015 21:23:40 +0000 (21:23 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Wed, 1 Jul 2015 21:23:40 +0000 (21:23 +0000)
llvm-svn: 241190

libcxx/include/memory
libcxx/test/std/utilities/memory/allocator.traits/allocator.traits.types/is_always_equal.pass.cpp
libcxx/test/std/utilities/memory/default.allocator/allocator_types.pass.cpp

index 69702c6..26ba564 100644 (file)
@@ -1787,6 +1787,7 @@ public:
     typedef const _Tp         value_type;
 
     typedef true_type propagate_on_container_move_assignment;
+    typedef true_type is_always_equal;
 
     template <class _Up> struct rebind {typedef allocator<_Up> other;};
 
index 927736c..31a0f17 100644 (file)
@@ -45,4 +45,8 @@ int main()
     static_assert((std::is_same<std::allocator_traits<A<char> >::is_always_equal, std::true_type>::value), "");
     static_assert((std::is_same<std::allocator_traits<B<char> >::is_always_equal, std::true_type>::value), "");
     static_assert((std::is_same<std::allocator_traits<C<char> >::is_always_equal, std::false_type>::value), "");
+
+    static_assert((std::is_same<std::allocator_traits<A<const char> >::is_always_equal, std::true_type>::value), "");
+    static_assert((std::is_same<std::allocator_traits<B<const char> >::is_always_equal, std::true_type>::value), "");
+    static_assert((std::is_same<std::allocator_traits<C<const char> >::is_always_equal, std::false_type>::value), "");
 }
index db08123..cba3210 100644 (file)
@@ -22,6 +22,7 @@
 //     typedef typename add_lvalue_reference<T>::type       reference;
 //     typedef typename add_lvalue_reference<const T>::type const_reference;
 //     typedef T                                     value_type;
+//     typedef true_type                             is_always_equal;
 //
 //     template <class U> struct rebind {typedef allocator<U> other;};
 // ...
@@ -42,6 +43,10 @@ int main()
     static_assert((std::is_same<std::allocator<char>::const_reference, const char&>::value), "");
     static_assert((std::is_same<std::allocator<char>::rebind<int>::other,
                                 std::allocator<int> >::value), "");
+
+    static_assert((std::is_same<std::allocator<      char>::is_always_equal, std::true_type>::value), "");
+    static_assert((std::is_same<std::allocator<const char>::is_always_equal, std::true_type>::value), "");
+
     std::allocator<char> a;
     std::allocator<char> a2 = a;
     a2 = a;