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