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