From 15ff4345c4be1bb0de1766f58607fbe74325ec87 Mon Sep 17 00:00:00 2001 From: Paolo Carlini <paolo.carlini@oracle.com> 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 <paolo.carlini@oracle.com> 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 f4af3d5c34cd..9fa73bef3a77 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-03-13 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56611 + * g++.dg/cpp0x/alias-decl-32.C: New. + 2013-03-11 Jan Hubicka <jh@suse.cz> 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 000000000000..1a4797edebf9 --- /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<class T> struct remove_reference { typedef T type; }; +template<class T> struct remove_reference<T&> { typedef T type; }; +template<class T> T declval() { return T(); } + +int f(int, int){return 0;} +struct Func{}; + +template<class... Args> struct result1 +{ + typedef decltype(f(declval<typename remove_reference<Args>::type>()...)) type; +}; + +template<class... Args> using result2 += decltype(f(declval<typename remove_reference<Args>::type>()...)); + +template<class Sig> struct R; +template<class This, class... Args> struct R< This(Args...) > +{ + typedef result2<Args...> type; +}; + +typedef R< Func(int, int) >::type R_type; -- GitLab