re PR c++/53307 (internal crash with variadic templates and decltype)

2012-10-10  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/53307
	* g++.dg/cpp0x/decltype44.C: New.

From-SVN: r192279
This commit is contained in:
Paolo Carlini 2012-10-09 23:37:07 +00:00 committed by Paolo Carlini
parent b3618b7167
commit 6a0260352e
2 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2012-10-10 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53307
* g++.dg/cpp0x/decltype44.C: New.
2012-10-09 Steve Ellcey <sellcey@mips.com>
* gcc.target/ext_ins.c: Modify f2 to aviod uninitialized data.

View File

@ -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);
}