summaryrefslogtreecommitdiffstats
path: root/libcxx/test/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/utilities')
-rw-r--r--libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp24
-rw-r--r--libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp26
2 files changed, 48 insertions, 2 deletions
diff --git a/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp b/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp
index 62fd23f5637..085c911b070 100644
--- a/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp
+++ b/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp
@@ -13,7 +13,7 @@
// struct allocator_traits
// {
// typedef Alloc::difference_type
-// | ptrdiff_t difference_type;
+// | pointer_traits<pointer>::difference_type difference_type;
// ...
// };
@@ -33,8 +33,30 @@ struct B
typedef T value_type;
};
+template <class T>
+struct C
+{
+ typedef T value_type;
+ struct pointer {};
+ struct const_pointer {};
+ struct void_pointer {};
+ struct const_void_pointer {};
+};
+
+namespace std
+{
+
+template <>
+struct pointer_traits<C<char>::pointer>
+{
+ typedef signed char difference_type;
+};
+
+}
+
int main()
{
static_assert((std::is_same<std::allocator_traits<A<char> >::difference_type, short>::value), "");
static_assert((std::is_same<std::allocator_traits<B<char> >::difference_type, std::ptrdiff_t>::value), "");
+ static_assert((std::is_same<std::allocator_traits<C<char> >::difference_type, signed char>::value), "");
}
diff --git a/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp b/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp
index 7a6d7891751..e9c175fe86a 100644
--- a/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp
+++ b/libcxx/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp
@@ -32,8 +32,32 @@ struct B
typedef T value_type;
};
+template <class T>
+struct C
+{
+ typedef T value_type;
+ struct pointer {};
+ struct const_pointer {};
+ struct void_pointer {};
+ struct const_void_pointer {};
+};
+
+namespace std
+{
+
+template <>
+struct pointer_traits<C<char>::pointer>
+{
+ typedef signed char difference_type;
+};
+
+}
+
int main()
{
static_assert((std::is_same<std::allocator_traits<A<char> >::size_type, unsigned short>::value), "");
- static_assert((std::is_same<std::allocator_traits<B<char> >::size_type, std::size_t>::value), "");
+ static_assert((std::is_same<std::allocator_traits<B<char> >::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>::value), "");
+ static_assert((std::is_same<std::allocator_traits<C<char> >::size_type,
+ unsigned char>::value), "");
}
OpenPOWER on IntegriCloud