Commit 049a5d31 by Jason Merrill Committed by Jason Merrill

PR c++/80840 - ICE with constexpr and reference

	* pt.c (convert_nontype_argument): Don't test whether a decl is
	value-dependent when binding to a reference.

From-SVN: r248749
parent 91e920c9
2017-05-31 Jason Merrill <jason@redhat.com>
PR c++/80840 - ICE with constexpr and reference
* pt.c (convert_nontype_argument): Don't test whether a decl is
value-dependent when binding to a reference.
2017-05-31 Nathan Sidwell <nathan@acm.org>
* cp-tree.h (lang_decl_slector): New enum.
......
......@@ -6749,7 +6749,11 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
}
}
if (!value_dependent_expression_p (expr))
if (TYPE_REF_OBJ_P (TREE_TYPE (expr))
&& value_dependent_expression_p (expr))
/* OK, dependent reference. We don't want to ask whether a DECL is
itself value-dependent, since what we want here is its address. */;
else
{
if (!DECL_P (expr))
{
......@@ -6771,8 +6775,11 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
return NULL_TREE;
}
expr = build_nop (type, build_address (expr));
expr = build_address (expr);
}
if (!same_type_p (type, TREE_TYPE (expr)))
expr = build_nop (type, expr);
}
/* [temp.arg.nontype]/5, bullet 4
......
// PR c++/80840
// { dg-do compile { target c++11 } }
template <class T, T X>
struct Just;
template <const double& X>
struct Number {
static constexpr double value = X;
using result = Just<const double&, value>;
};
int main() {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment