Defect Report #123

Submission Date: 03 Dec 93
Submittor: WG14
Source: Ron Guilmette
Question
ANSI/ISO C Defect Report #rfg30:
Subject: ``Type categories'' and qualified types.
a) Is the following code strictly conforming?
b) Must a conforming implementation correctly translate the following code?
enum E1 { enumerator1 = (const int) 9 }; /* ? */
enum E2 { enumerator2 = (volatile int) 9 }; /*
? */

Background:
Subclause 6.5.2.2 (Constraints):
The expression that defines the value of an enumeration constant shall be an integral constant expression that has a value representable as an int.
Subclause 6.4 (Semantics):
Cast operators in an integral constant expression shall only convert arithmetic types to integral types, ...
Subclause 6.1.2.5:
The type char, the signed and unsigned integer types, and the enumerated types are collectively called integral types.
Subclause 6.1.2.5:
Any type so far mentioned mentioned is an unqualified type. Each unqualified type has three corresponding qualified versions of its type: ... The qualified or unqualified versions of a type are distinct types that belong to the same type category ...
The problem is with the term ``type category.'' I have been unable to find any actual definition of this term in the C Standard. My assumption is that integral types constitute one such ``type category,'' but it would be nice to have the Committee's assurances about this. More specifically, I think that it would be advisable to add a statement somewhat like the following one just after the first paragraph in subclause 6.1.2.5:
In addition to the partitioning of types into object types, function types, and incomplete types, each type is also said to belong to some type category. The type categories are integral types, floating types, pointer types, structure types, union types, array types, void types, and function types.
Response
a) Yes.
b) Yes.
As stated in subclause 6.5.3, ``The properties associated with qualified types are meaningful only for expressions that are lvalues.'' The definition of ``type category'' is given in subclause 6.1.2.5, in the paragraph preceding your last citation.
Previous Defect Report < - > Next Defect Report