On 10/10/2010 02:15 PM, Bruno Haible wrote:
> I disagree that this is enough. The C standard says that a cast to floating-
> point types cannot be portably used in integer constant expressions. But a
> compiler is free to support this, as an extension.

By the same argument, a compiler is also free to support

        struct foo { unsigned int bar : -1 };

as an extension, and therefore none of gnulib's verification code
can possibly work.

Which obviously is not the case.  The C Standard requires a diagnostic
for the above declaration, because the "-1" violates a constraint.
Similarly, the C Standard requires a diagnostic if we replace
"-1" with "1.0", because the requirement that the bitfield width
must be an integral constant expression is a constraint, and
constraint violations must be diagnosed.

If there were a popular nonstandard compiler that accepted these
declarations without complaint, then we'd be in trouble.  But
fortunately for us, that's not the case.

Reply via email to