C++ PATCH: Disallow floating-point literals in integral-constant expressions
Matt Austern
austern@apple.com
Tue Feb 1 20:00:00 GMT 2005
On Feb 1, 2005, at 11:55 AM, Mark Mitchell wrote:
> Joe Buck wrote:
>> On Mon, Jan 31, 2005 at 05:52:24PM -0800, Mark Mitchell wrote:
>>> It is not true that if GCC X accepted a piece of code, but GCC X + 1
>>> does not, then we have removed a feature and must deprecate, etc.
>> In general this is true, but not in this case. You have removed a
>> well-known g++ extension that dates back to 1990, the first year that
>> I
>> used g++.
>
> I was using G++ at that point too, but I don't remember ever trying to
> do this particular thing. Perhaps I generally tried to avoid
> non-standard usage (in the ARM sense, in those days) more than other
> people using G++.
>
> In any case, I suggest we hndle it as follows. The current codebase
> (as of this morning) will issue an error only with -pedantic. It will
> do that both for occurrences of floating-point literals in integral
> constant expressions (that are not cast to an integral type) and for
> initializations of static data members of floating-point type.
>
> In other words, with -pedantic, we warn about both data members in:
>
> struct S {
> static const int i = 3.0; // Invalid integral constant expression.
> static const double d = 0; // Invalid data member type.
> };
>
> With -fpermissive (or no option) we accept both lines.
>
> So, I think the current codebase is acceptable to you.
>
> This particular extension is very unlikely to cause us to do something
> really bad. (Other things that we used to accept in what should have
> been integral constant expressions did cause real confusion, including
> ICEs.) Also, I cannot think of any way in which allowing
> floating-point literals in integral constant expressions could change
> the meaning of a conforming program. So, the current state is
> acceptable to me too, except that instead of "if (pedantic) error
> (...)" I should probably use "if (pedantic) pedwarn (...)".
>
> I think that the remaining action item, then, is to document this
> extension. Would you please document both the extension to allow
> floating-point literals in integral constant expressions and the
> extension to allow initialized static data members of floating-point
> type?
The documentation should presumably say that it's deprecated?
--Matt
More information about the Libstdc++
mailing list