Defect Report #010
Submission Date: 10 Dec 92
Submittor: WG14
Source: X3J11/90-044 (Michael S. Ball)
Question 1
Consider:
typedef int table[]; /* line 1 */
table one = {1}; /* line 2 */
table two = {1, 2}; /* line 3 */
First, is the typedef to an incomplete type legal? I can't
find a prohibition in the standard. But an incomplete type is completed
by a later definition, such as line 2, so what is the status of line 3?
The type, of which table is only a synonym, can't
be completed by line 2 if it is to be used in line 3. And what is
sizeof(table)? What old C compilers seem to do is treat the
typedef as some sort of textual equivalent, which is clearly wrong.
Response
A typedef of an incomplete type is
permitted.
Regarding objects one and two,
refer to the standard subclause 6.1.2.5, page 24, lines 8-9: ``An array
of unknown size is an incomplete type. It is completed, for an
identifier of that type, by specifying the size in a later
declaration ...'' [emphasis added]. The types of objects one
and two are completed but the typ e table
itself is never completed. Hence, sizeof(table)
is not permitted.
An example very similar to that submitted is
shown in example 6, subclause 6.5.7 on page 74, lines 16-23.
Previous Defect Report
< - > Next Defect Report