From abab8b02e8102ab546f97b60acc3644d1f3bba2a Mon Sep 17 00:00:00 2001 From: jason Date: Fri, 20 May 2011 19:02:17 +0000 Subject: [PATCH] PR c++/48745 * pt.c (value_dependent_expr_p): Handle CONSTRUCTOR. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173972 138bc75d-0d04-0410-961f-82ee72b054a4 index d49fe6b..d9c7ac4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18231,6 +18231,16 @@ value_dependent_expression_p (tree expression) type-dependent. */ return type_dependent_expression_p (expression); + case CONSTRUCTOR: + { + unsigned ix; + tree val; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val) + if (value_dependent_expression_p (val)) + return true; + return false; + } + default: /* A constant expression is value-dependent if any subexpression is value-dependent. */ new file mode 100644 index 0000000..2b9351a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae22.C @@ -0,0 +1,23 @@ +// PR c++/48745 +// { dg-options -std=c++0x } + +template +struct add_rval_ref { + typedef T&& type; +}; + +template<> +struct add_rval_ref { + typedef void type; +}; + +template +typename add_rval_ref::type create(); + +template +decltype(T{create()...}, char()) f(int); + +template +char (&f(...))[2]; + +static_assert(sizeof(f(0)) != 1, "Error"); // { dg-bogus "void value" "" { xfail *-*-* } } -- 1.7.0.4