Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/include




On Thu, 5 Jun 2003, Ben Harris wrote:

> On Thu, 5 Jun 2003, Jason Thorpe wrote:
>
> > Wait... "_assert" is in the application's namespace??
>
> I think so.  Identifiers that start with an underscore (but not with an
> underscore followed by either an underscore or an upper-case letter) are
> only reserved "for identifiers with file scope in both the ordinary
> identifier and tag name spaces".  I think macros (and _assert is a macro),
> by virtue of overriding all uses of the name in question, exceed the scope
> of that reservation.

I'm not sure that this is the correct interpretation...

I think "reserved" should be read as "reserved to the implementation",
which is how the C++ standard expresses the corresponding requirements
(ISO/IEC 14882:1998, 17.4.3.1.2)

So what I believe your quote says is that all identifiers starting
with _ are reserved for the implementation, but the implementation
must not use _[a-z] for any global scope, i.e. it might implement
the assert() macro as a call to a function

   #define assert(X) _Assert(X)

but not as

   #define assert(X) _assert(X)

since that would need a global identifier _assert.

It is however fine for an implentation to define

   #define _assert(X) _Assert(X)

since the _assert(X) will only be used within a file scope.


But I agree that _assert() should be removed from our source...




Home | Main Index | Thread Index | Old Index