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;