// PR c++/53307 // { dg-do compile { target c++11 } } template struct tuple{}; struct funct { template T operator()(T arg1, argTs...) { return arg1; } }; template class test; template < template class tp, class...arg1Ts, class...arg2Ts> class test, tp> { public: template auto test_pass(func fun, arg2Ts...arg2s) -> decltype(fun(arg2s...)) { return fun(arg2s...); } template auto testbug(func fun, arg2Ts...arg2s, arg3Ts...arg3s) -> decltype(fun(arg2s..., arg3s...)) { return fun(arg2s..., arg3s...); } }; int main() { test, tuple> t; t.test_pass (funct(), 'a', 2); t.testbug (funct(), 'a', 2, "fine"); t.testbug (funct(), 'a', 2); }