C++ における NULL

いや、もうなんていうか自分的には C++ における NULL の話をしているつもりなのに C での話を持ってこられても困るというか。
調べた人もいるので、そっちをみれば終了なんだけど、GCCメーリングリストでもちょっと議論になっていたのが見やすかったのでそっちから引用。

> I see what you are saying, but unfortunately, this is not my code.  I am
> mearly porting it.  And, technically, it should work since the standard says
> NULL should be a 0 or 0L
       ^^^^^^^^
No. The C++ Standard does not say anything like that. The exact
wording is:

18.1/4
    • -
The macro NULL is an implementation-defined C++ null pointer constant in this Internnational Standard (4.10).
    • -
Footnote says:
    • -
Possible definitions include 0 and OL, but not (void*)0.
    • -

要するに NULL 無効ポインタを示す定数に展開されるマクロだとしか定義されていない。(void *) 0は不可だけど。なんかこの後、議論があったようで、「これはバグだ」と主張する人もいたみたいだけど、そのままってことは別に NULL = 0 で無くてもいいという結論が出たんだろう。
まぁ、Stroustrap 氏は "the definition of NULL is 0" といっているらしいけど、C++ の規格的に #define NULL 0でないといけないというわけではない。
ちなみに GCC でも C のソースコードコンパイルするときは #define NULL ((void *)0) だったりする。
どうでもいいけど、egcs なんて文字列は久しぶりに見た気がする。ここ読んでいるひとで egcs の読み方が分かるひとはどれくらいだろう。つうかみんな Cygnus Solutions とか知ってるのかな。