Re: GCC: non-conforming implementation of C++
MQ wrote:
:: On Jul 28, 8:29 pm, "Bo Persson" <b...@gmb.dk> wrote:
::
::: Yes, this is considered a bug in the standard document. :-)
:::
::: For the next edition of the standard, this section has been
::: rephrased as:
:::
::: A translation unit that includes a standard library header shall
::: not #define or #undef names declared in any standard library
::: header.
:::
::: A translation unit shall not #define or #undef names lexically
::: identical to keywords.
:::
::: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#294
:::
::: Bo Persson
::
:: Thanks for the link. As the implementor of a compiler, should I
:: make this an error, forcing termination of compilation? For
:: interest's sake, is there any real concern with compatibility with
:: old code if I did this?
::
Depending on your audience, you should probably consider having this
selectable at compile time. Older *very popular* compilers, like MS
VC6, did strange things like
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
which was technically sort of ok at the time, as the compiler appeared
before the first C++ standard.
There are TONS of old code around, some of which you cannot change
whatever you do. A very popular OS is installed in 100s of millions of
copies, using pre-standard data types.
If you try to sell your compiler, you first have to decide if it
should accept this code:
#include "windows.h"
int main()
{ }
Your choice! :-)
Bo Persson