blob: 20348d20c10cd15b7e9763e3cc14eb6caf45635e [file] [log] [blame]
Howard Hinnantc52f43e2010-08-22 00:59:46 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantc52f43e2010-08-22 00:59:46 +00007//
8//===----------------------------------------------------------------------===//
9
10// <memory>
11
12// template <class Alloc>
13// struct allocator_traits
14// {
15// typedef Alloc::const_pointer
16// | pointer_traits<pointer>::rebind<const value_type>
17// ...
18// };
19
20#include <memory>
21#include <type_traits>
22
23template <class T>
24struct Ptr {};
25
26template <class T>
27struct A
28{
29 typedef T value_type;
30 typedef Ptr<T> pointer;
31};
32
33template <class T>
34struct B
35{
36 typedef T value_type;
37};
38
39template <class T>
40struct CPtr {};
41
42template <class T>
43struct C
44{
45 typedef T value_type;
46 typedef CPtr<T> pointer;
47 typedef CPtr<const T> const_pointer;
48};
49
50int main()
51{
52 static_assert((std::is_same<std::allocator_traits<A<char> >::const_pointer, Ptr<const char> >::value), "");
53 static_assert((std::is_same<std::allocator_traits<B<char> >::const_pointer, const char*>::value), "");
54 static_assert((std::is_same<std::allocator_traits<C<char> >::const_pointer, CPtr<const char> >::value), "");
55}