diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2013-03-13 11:44:32 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-03-13 11:44:32 +0000 |
commit | 15ff4345c4be1bb0de1766f58607fbe74325ec87 (patch) | |
tree | b96d6f4d3d165637060cab8cce23eb38901bd2fa | |
parent | 8a38ebb653b75814bb3f1136ea3a0710855a6c60 (diff) | |
download | gcc-15ff4345c4be1bb0de1766f58607fbe74325ec87.zip gcc-15ff4345c4be1bb0de1766f58607fbe74325ec87.tar.gz gcc-15ff4345c4be1bb0de1766f58607fbe74325ec87.tar.bz2 |
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
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/alias-decl-32.C | 25 |
2 files changed, 30 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f4af3d5..9fa73be 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 0000000..1a4797e --- /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; |