From 15ff4345c4be1bb0de1766f58607fbe74325ec87 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 13 Mar 2013 11:44:32 +0000 Subject: [PATCH] re PR c++/56611 ([C++11] Template instantiation failure with variadic arguments and template aliases) 2013-03-13 Paolo Carlini PR c++/56611 * g++.dg/cpp0x/alias-decl-32.C: New. From-SVN: r196631 --- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C | 25 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f4af3d5c34c..9fa73bef3a7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-03-13 Paolo Carlini + + PR c++/56611 + * g++.dg/cpp0x/alias-decl-32.C: New. + 2013-03-11 Jan Hubicka PR middle-end/56571 diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C new file mode 100644 index 00000000000..1a4797edebf --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C @@ -0,0 +1,25 @@ +// PR c++/56611 +// { dg-do compile { target c++11 } } + +template struct remove_reference { typedef T type; }; +template struct remove_reference { typedef T type; }; +template T declval() { return T(); } + +int f(int, int){return 0;} +struct Func{}; + +template struct result1 +{ + typedef decltype(f(declval::type>()...)) type; +}; + +template using result2 += decltype(f(declval::type>()...)); + +template struct R; +template struct R< This(Args...) > +{ + typedef result2 type; +}; + +typedef R< Func(int, int) >::type R_type;