+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.
}
}
- 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))
{
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
--- /dev/null
+// 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() {}