nullptr イディオムをいじめるスレ

部長の台詞を指摘いただいたお礼にネタを提供.

C++0xで導入されるnullptrを
C++03のライブラリレイヤでがんばるメソッド nullptrイディオム をゆっくり写経
…してみたらエラー.

VS 2008 (SP1) だと (boost::|std::tr1::)shared_ptr と nullptr イディオムを == や != で比較すると「内部エラー」で果てます.今まで生ポインタをチェックしてた箇所が shared_ptr への切り替えでおかしくなったという経緯で見かけました.多分 shared_ptrは「safe bool イディオム」すなわち if の判定には使えるが int 的な比較演算にも delete にも使えない何か(メンバ関数ポインタへの変換演算子)を提供してるはずで, nullptr もメンバ関数ポインタとして使うとき用に同様の変換演算子があるので,それら同士の比較が彼には難しすぎるらしい.
あと GTest (Google C++ Testing Framework) の EXPECT_EQ に使うと,テンプレート関数のテンプレート引数が「nullptr の型(無名クラス)」になってしまい,ポインタへの変換演算子が働かずにコンパイルエラーになる例が確認されています.
しかし今まで使っていた環境をC++0x対応の処理系にアップデートするのは色々と面倒なのでできれば放置したいのであった...