* decl.c (make_typename_type): s/parameters/arguments/.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / decltype44.C
blob2b2e62213e2eafde2738ab41fa1212de1405ae84
1 // PR c++/53307
2 // { dg-do compile { target c++11 } }
4 template <class...Ts> struct tuple{};
6 struct funct
8   template <class T, class...argTs>
9   T operator()(T arg1, argTs...)
10   {
11     return arg1;
12   }
15 template <class...>class test;
17 template < template <class...> class tp,
18            class...arg1Ts,
19            class...arg2Ts> 
20 class test<tp<arg1Ts...>, tp<arg2Ts...>>
22  public:
23   template <class func>
24     auto test_pass(func fun, arg2Ts...arg2s) 
25     -> decltype(fun(arg2s...)) 
26   {
27     return fun(arg2s...);
28   }
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   }
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);