Golden said:
Something that is incomplete isn't the thing. It has the potential to become
the thing, when made complete.
That's at best a highly debatably argument, even in ordinary English
usage. However, we're not talking about ordinary English usage here.
The standard defines the terms "type" and "incomplete type", and it
specifies that "Types are partitioned into _object types_ (types that
fully describe objects), _function types_ (types that describe
functions), and _incomplete types_ (types that describe objects but
lack information needed to determine their sizes)."
There are two distinct ways in which this statement makes it clear
that, as the C standard defines the term, "incomplete types" are a
subset of "complete types". The first is the fact that the category
"types" is being partitioned, and that "incomplete types" describes
one of the sub-categories it is being partitioned into. The second way
is based upon the fact that the phrase "incomplete types" is
italicized in this paragraph. According to ISO conventions, that
indicates that this particular paragraph defines what the phrase
"incomplete types" means, as far as the C standard is concerned. That
definition specifies that they are "types that ...". In other words,
incomplete types ARE types.
What happens to an incomplete type when it is completed is that it
becomes a function or object type; it does not, however, change from
not being a type to being a type.