111
|
1 // PR c++/53307
|
|
2 // { dg-do compile { target c++11 } }
|
|
3
|
|
4 template <class...Ts> struct tuple{};
|
|
5
|
|
6 struct funct
|
|
7 {
|
|
8 template <class T, class...argTs>
|
|
9 T operator()(T arg1, argTs...)
|
|
10 {
|
|
11 return arg1;
|
|
12 }
|
|
13 };
|
|
14
|
|
15 template <class...>class test;
|
|
16
|
|
17 template < template <class...> class tp,
|
|
18 class...arg1Ts,
|
|
19 class...arg2Ts>
|
|
20 class test<tp<arg1Ts...>, tp<arg2Ts...>>
|
|
21 {
|
|
22 public:
|
|
23 template <class func>
|
|
24 auto test_pass(func fun, arg2Ts...arg2s)
|
|
25 -> decltype(fun(arg2s...))
|
|
26 {
|
|
27 return fun(arg2s...);
|
|
28 }
|
|
29
|
|
30 template <class func, class...arg3Ts>
|
|
31 auto testbug(func fun, arg2Ts...arg2s, arg3Ts...arg3s)
|
|
32 -> decltype(fun(arg2s..., arg3s...))
|
|
33 {
|
|
34 return fun(arg2s..., arg3s...);
|
|
35 }
|
|
36 };
|
|
37
|
|
38 int main()
|
|
39 {
|
|
40 test<tuple<>, tuple<char, int>> t;
|
|
41 t.test_pass (funct(), 'a', 2);
|
|
42 t.testbug (funct(), 'a', 2, "fine");
|
|
43 t.testbug (funct(), 'a', 2);
|
|
44 }
|