1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
3aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith
4aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithtemplate <class _Tp, class _Up, bool = false>
5aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithstruct __allocator_traits_rebind
6aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith{
7aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith};
8aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith
9aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithtemplate <template <class, class...> class _Alloc, class _Tp, class ..._Args,
10aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithclass _Up>
11aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithstruct __allocator_traits_rebind<_Alloc<_Tp, _Args...>, _Up, false>
12aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith{
13aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith   typedef _Alloc<_Up, _Args...> type;
14aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith};
15aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith
16aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithtemplate <class Alloc>
17aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithstruct allocator_traits
18aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith{
19aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith   template <class T> using rebind_alloc = typename __allocator_traits_rebind<Alloc, T>::type;
20aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith   template <class T> using rebind_traits = allocator_traits<rebind_alloc<T>>;
21aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith};
22aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith
23aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithtemplate <class T>
24aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithstruct allocator {};
25aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith
26aff37b48f1362dd29cc481dadebf07900ce79248Richard Smithint main()
27aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith{
28aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith   allocator_traits<allocator<char>>::rebind_alloc<int> a;
29aff37b48f1362dd29cc481dadebf07900ce79248Richard Smith}
30