https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90124
--- Comment #7 from Marek Polacek <mpolacek at gcc dot gnu.org> --- (In reply to Marek Polacek from comment #6) > The operand of the decltype specifier is an unevaluated operand and perhaps > we have to take that into account here. ...i.e., naming of objects does not, by itself, require that a definition be provided. This should fix it: --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2478,6 +2478,7 @@ build_class_member_access_expr (cp_expr object, tree member, must: we don't know how to refer to a base member before layout is complete. But still don't complain in a template. */ if (!dependent_type_p (object_type) + && !cp_unevaluated_operand && !complete_type_or_maybe_complain (object_type, object, complain)) return error_mark_node;