From 25a96761979b320209f0b513ad364e5d9e5a05d6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sun, 20 Nov 2011 21:05:03 -0500 Subject: [PATCH] * pt.c (tsubst_pack_expansion): Fix SFINAE. From-SVN: r181548 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/pt.c | 4 +++- gcc/testsuite/g++.dg/cpp0x/sfinae30.C | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/sfinae30.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 93cd960a611..c08314449bf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2011-11-20 Jason Merrill + * pt.c (tsubst_pack_expansion): Fix SFINAE. + PR c++/48322 * cp-tree.h (PACK_EXPANSION_EXTRA_ARGS): New. * cp-tree.def (EXPR_PACK_EXPANSION): Add an operand for it. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f0ee0c5f17e..2ba26b206bd 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -9350,7 +9350,9 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, len = my_len; else if (len != my_len) { - if (TREE_CODE (t) == TYPE_PACK_EXPANSION) + if (!(complain & tf_error)) + /* Fail quietly. */; + else if (TREE_CODE (t) == TYPE_PACK_EXPANSION) error ("mismatched argument pack lengths while expanding " "%<%T%>", pattern); diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae30.C b/gcc/testsuite/g++.dg/cpp0x/sfinae30.C new file mode 100644 index 00000000000..6fcf5f75609 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae30.C @@ -0,0 +1,25 @@ +// { dg-do compile { target c++11 } } + +template struct tuple; +template struct tuple { T t; }; + +template struct pair; +template<> struct pair { }; + +template +struct A +{ + template ...> > + static void f(Us...) + { + V v; + } + template + static void f(bool); +}; + +int main() +{ + A::f(1.0); +}