Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
      2 
      3 template <class _Tp, class _Up>
      4 struct __allocator_traits_rebind
      5 {
      6     typedef typename _Tp::template rebind<_Up>::other type;
      7 };
      8 
      9 template <class Alloc>
     10 struct allocator_traits
     11 {
     12     typedef Alloc allocator_type;
     13     template <class T> using rebind_alloc = typename
     14 __allocator_traits_rebind<allocator_type, T>::type;
     15     template <class T> using rebind_traits = allocator_traits<rebind_alloc<T>>;
     16 };
     17 
     18 template <class T>
     19 struct ReboundA {};
     20 
     21 template <class T>
     22 struct A
     23 {
     24     typedef T value_type;
     25 
     26     template <class U> struct rebind {typedef ReboundA<U> other;};
     27 };
     28 
     29 int main()
     30 {
     31     allocator_traits<A<char> >::rebind_traits<double> a;
     32 }
     33