[C++] 標準出力にNULLの文字ポインタを与えると・・・ --- を読み込み中にアクセス違反が発生しました。

元のコード
#include <iostream>
int main()
{
 char* str = NULL;
 std::cout << "Hello"; //--- (1)
 std::cout << str;
 std::cout << " Wor" << std::endl << std::flush;
 std::cout << "ld";
 std::cerr << (std::cout.bad() ? "?" : "!"); //--- (2)
 return 0;
}

さて、標準出力にchar*型のNULL値を与えると
どう出力されるのでしょうか。
,,,,,

出力:(Borland C++ 5.5.1 for Win32とg++4.4.3ぐらい?)

Hello?

(1)と(2)のtrue caseだけしか表示されません。
というわけで、std::coutに間違ってNULL文字列を与えると
それ以降の標準出力が黙ってしまいます。
これは、end()やflush()でフラグをリセットしても戻らないようです。

一方、std::cerrは別系統なのか、無事に出力されます。

コンパイラもエラーを出さないし、
ランタイムでも例外にならないなんてひどいじゃないか。
一応、badフラグはONにしてくれるけど。

【追記】
VC++(2010 Express)で試したら、以下の例外を出してくれました。

main.exe の 0x5c5ad540 (msvcr100d.dll) でハンドルされていない例外が発生しました: 
0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。

場所をみると、strlen.asmでした。
どうも、出力文字列が何文字か調べる際に、
NULL文字列なので、長さがわからなくて困っているようです。