1f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor// PR9073
2f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregortemplate<typename _Tp>
3f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregorclass shared_ptr{
4f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregorpublic:
5f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  template<class _Alloc, class ..._Args>
6f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  static
7f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  shared_ptr<_Tp>
8f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  allocate_shared(const _Alloc& __a, _Args&& ...__args);
9f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor};
10f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor
11f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregortemplate<class _Tp>
12f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregortemplate<class _Alloc, class ..._Args>
13f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregorshared_ptr<_Tp>
14f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregorshared_ptr<_Tp>::allocate_shared(const _Alloc& __a, _Args&& ...__args)
15f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor{
16f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  shared_ptr<_Tp> __r;
17f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor  return __r;
18f9997a0834e0e0298b04ef044ad2699c727a7979Douglas Gregor}
196964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smith
206964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smithtemplate<typename...Ts> struct outer {
216964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smith  template<Ts...Vs, template<Ts> class ...Cs> struct inner {
226964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smith    inner(Cs<Vs>...);
236964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smith  };
246964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smith};
256964b3f80ce1ba489e7e25e7cd58062699af9b0cRichard Smithtemplate struct outer<int, int>;
26