On Tue, Oct 23, 2001 at 11:51:46PM +0200, Martin v. Loewis wrote: > > On Tue, Oct 23, 2001 at 08:21:26PM +0200, Martin v. Loewis wrote: > > > > The following code does not produce an error when one is > > > > expected. > > > > void stat (); > > > > > > > > static const int success = 0; > > > > > > > > void monk () > > > > { > > > > if (stat == success); > > > > }; > > > > > > Thanks for your report. This is not a bug in the compiler: both the > > > function pointer and the integer convert to bool (4.12). So this is a > > > boolean comparison, and thus well-formed C++. > > > > Really? > > You are right, I was confused (I thought of the operator signatures in > 13.6/12, ignoring that those aren't used if none of the arguments was > of class type). > > I'll take another attempt at declaring gcc behaviour to be correct. > According to 4.10/1, "success" is a null pointer constant: > > # A null pointer constant is an integral constant expression (5.19) > # rvalue of integer type that evaluates to zero. A null pointer > # constant can be converted to a pointer type; the result is the null > # pointer value of that type and is distinguishable from every other > # value of pointer to object or pointer to function type. > > 5.19/1 defines "integral constant expressions": > > # An integral constant-expression can involve only literals (2.13), > # enumerators, const variables or static data members of integral or > # enumeration types initialized with constant expressions (8.5), > # non-type template parameters of integral or enumeration types, and > # sizeof expressions. > > Since "success" is an integral constant expression of integer type, it > is a null pointer constant, and can be converted to void(*)(). So > this is a function pointer comparison, and thus well-formed C++ :-)
I don't think you're arguing the right side. Look at my message - I don't know what the poster did, but _MY_ installed g++ v3.0 declares it invalid. I suppose that the argument you present above COULD apply, but considering 'static const int s = 0;' a NULL pointer constant seems very wrong to me somehow :) -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer