+2016-09-30 Jason Merrill <jason@redhat.com>
+
+ PR c++/77775
+ * constexpr.c (cxx_eval_component_reference): Use name matching
+ for PMFs.
+
2016-10-04 Jason Merrill <jason@redhat.com>
Implement P0091R2, Template argument deduction for class templates.
}
if (*non_constant_p)
return t;
+ bool pmf = TYPE_PTRMEMFUNC_P (TREE_TYPE (whole));
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
{
- if (field == part)
+ /* Use name match for PMF fields, as a variant will have a
+ different FIELD_DECL with a different type. */
+ if (pmf ? DECL_NAME (field) == DECL_NAME (part)
+ : field == part)
{
if (value)
return value;
if (is_really_empty_class (TREE_TYPE (t)))
return build_constructor (TREE_TYPE (t), NULL);
+ gcc_assert (DECL_CONTEXT (part) == TYPE_MAIN_VARIANT (TREE_TYPE (whole)));
+
if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole))
{
/* 'whole' is part of the aggregate initializer we're currently
--- /dev/null
+// PR c++/77775
+// { dg-options -fdump-tree-gimple }
+// { dg-final { scan-tree-dump "== viewAdded" "gimple" { target c++11 } } }
+
+namespace Sublime {
+struct View;
+struct AreaIndex;
+struct Area {
+ void qt_static_metacall();
+ void viewAdded(AreaIndex *, View *);
+};
+}
+void Sublime::Area::qt_static_metacall() {
+ typedef void (Area::*_t)(AreaIndex *, View *);
+ if (*reinterpret_cast<_t *>(1) == _t(&Area::viewAdded))
+ __builtin_abort();
+}