1 // PR9073
2 template<typename _Tp>
3 class shared_ptr{
4 public:
5   template<class _Alloc, class ..._Args>
6   static
7   shared_ptr<_Tp>
8   allocate_shared(const _Alloc& __a, _Args&& ...__args);
9 };
10 
11 template<class _Tp>
12 template<class _Alloc, class ..._Args>
13 shared_ptr<_Tp>
allocate_shared(const _Alloc & __a,_Args &&...__args)14 shared_ptr<_Tp>::allocate_shared(const _Alloc& __a, _Args&& ...__args)
15 {
16   shared_ptr<_Tp> __r;
17   return __r;
18 }
19 
20 template<typename...Ts> struct outer {
21   template<Ts...Vs, template<Ts> class ...Cs> struct inner {
22     inner(Cs<Vs>...);
23   };
24 };
25 template struct outer<int, int>;
26 
27 template<typename ...T> void take_nondependent_pack(int (...arr)[sizeof(sizeof(T))]);
28 
29 template<typename T> using hide = int;
30 template<typename ...T> void take_nondependent_pack_2(outer<hide<T>...>);
31