diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2010-11-18 01:40:00 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2010-11-18 01:40:00 +0000 |
| commit | a4a1ef1fc265d0abd1534ff892aa91edd6cc8bd4 (patch) | |
| tree | 5e41a303980c5b7669d88d4b5ed5701ced337a6f /libcxx/test/utilities | |
| parent | 9c335bf977cd0593cfdeb0efc4c70a1cb67ab0d8 (diff) | |
| download | bcm5719-llvm-a4a1ef1fc265d0abd1534ff892aa91edd6cc8bd4.tar.gz bcm5719-llvm-a4a1ef1fc265d0abd1534ff892aa91edd6cc8bd4.zip | |
LWG 1404
llvm-svn: 119609
Diffstat (limited to 'libcxx/test/utilities')
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), ""); } |

