-
Notifications
You must be signed in to change notification settings - Fork 781
Description
[class.mem.general]/12:
The member-declarator-list can be omitted only after a class-specifier or an enum-specifier or in a friend declaration.
[class.nest]/3:
If class
X
is defined in a namespace scope, a nested classY
may be declared in classX
and later defined in the definition of classX
or be later defined in a namespace scope enclosing the definition of classX
.
Consider
class E {
class I1; // forward declaration of nested class
};
AFAIK, class I1;
is a member-declaration with an elaborated-type-specifier and no member-declarator-list. According to [class.mem.general]/12, this is not permitted because there's no class-specifier or enum-specifier or friend
. But [class.nest]/3 seems to suggest that it's valid. (How else can one declare but not define a class name in a class scope?)
I believe it's obvious that the example in question is valid, and [class.mem.general]/12 needs to account for elaborated-type-specifier. (Maybe it should use similar wording as in [dcl.pre]/5.)