Defect Report #102

Submission Date: 03 Dec 93
Submittor: WG14
Source: Ron Guilmette
ANSI/ISO C Defect report #rfg9:
Subclause 6.5 Constraints says:
If an identifier has no linkage, there shall be no more than one declaration of the identifier (in a declarator or type specifier) with the same scope and in the same name space, except for tags as specified in
Subclause, Semantics section says:
Subsequent declarations [of a tag] in the same scope shall omit the bracketed list.
Given that one of the above two rules appears in a Constraints section, while the other appears in a Semantics section, it is ambiguous whether or not diagnostics are strictly required in the following cases (in which more than one defining declaration of each tag appears within a single scope):
void example ()
struct S { int member; };
struct S { int member; }; /*
diagnostic required? */

union U { int member; };
union U { int member; }; /*
diagnostic required? */

enum E { member };
enum E { member }; /*
diagnostic required? */

A diagnostic is required for the struct, union, and enum redeclarations indicated in the question. Subclause 6.5 indicates that there must be a diagnostic ``except for tags as specified in'' In subclause, the specified exception is for subsequent declarations that omit the bracketed list.
See also the response to Defect Report #017, Question 3.
Previous Defect Report < - > Next Defect Report