1 // { dg-do compile { target c++11 } } 2 3 // Add arguments to unbound template template parameter. 4 5 template <template <class> class Template> 6 struct Internal { 7 template <class Arg> using Bind = Template<Arg>; 8 }; 9 10 template <template <class> class Template, class Arg> 11 using Instantiate = Template<Arg>; // After parsing #1, the 12 // BOUND_TEMPLATE_TEMPLATE_PARM 13 // parameter Template gets 14 // the UNBOUND_CLASS_TEMPLATE 15 // Internal<Template>::template Bind 16 // as an argument, and the 17 // parameter Arg gets Argument as 18 // an argument. And we build 19 // 'Bind<Argument>'. 20 21 template <template <class> class Template, class Argument> 22 using Bind = Instantiate<Internal<Template>::template Bind, Argument>; //#1 23 24