diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-01-22 01:27:19 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-01-22 01:27:19 +0000 |
commit | 4e88b14f90b773851042752cb51284f58a45b96d (patch) | |
tree | de71e13439e099b6066db7e2fbe61fcecf1d8a26 | |
parent | b1872c46cb6bb38a56de23f5513a182d9dabf8d7 (diff) |
PR c++/56059
* tree.c (strip_typedefs_expr) [TREE_VEC]: Preserve non-default
template args count.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195355 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/tree.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype48.C | 16 |
3 files changed, 24 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6370f7f1750..162420bfa91 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-01-21 Jason Merrill <jason@redhat.com> + + PR c++/56059 + * tree.c (strip_typedefs_expr) [TREE_VEC]: Preserve non-default + template args count. + 2013-01-18 Jason Merrill <jason@redhat.com> PR target/54908 diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 2b108c1bf3c..d1f14fcfc76 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1351,6 +1351,8 @@ strip_typedefs_expr (tree t) r = copy_node (t); for (i = 0; i < n; ++i) TREE_VEC_ELT (r, i) = (*vec)[i]; + SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT + (r, GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t)); } else r = t; diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype48.C b/gcc/testsuite/g++.dg/cpp0x/decltype48.C new file mode 100644 index 00000000000..29ce8157a7c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype48.C @@ -0,0 +1,16 @@ +// PR c++/56059 +// { dg-options -std=c++11 } + +typedef int Int; +template<typename T> struct baz { }; +template<typename T> T bar(); + +template<typename T, typename ... U> +baz<decltype(bar<Int>(bar<U>() ...))> // { dg-error "no match" } +foo(); + +int main() +{ + foo<int, int>(); // { dg-error "no match" } + return 0; +} |