min/maxマクロ問題調査

Boost Inspectツールを使うと、Boostのmin/maxガイドラインに違反しているファイルを見つけることができます。(コメント中のmin/maxも引っかかるので注意)
これを使って、min/maxマクロの定義を回避するマクロ、NOMINMAXの影響度を調べてみました。
VC8のランタイムはさすがに問題なく、付属のPlatformSDKでは、

  • GdiPlusTypes.h
  • dxtmpl.h

がmin/maxマクロを使っていました。dxtmpl.hはよく分かりませんが何かのラッパーみたいなので、GDI+を使わなければ影響なしと考えてよいでしょう。
cygwinの/usr/include配下ではJavaのヘッダが引っかかりました。これがどこで使われるのかも不明ですが(GCJが使うのかな?)、普通は影響ないと思います。
あとは、libstdc++のヘッダが引っかかりますが、こちらはmin/maxマクロがあると問題が起きるパターンで、寧ろNOMINMAXを定義しておいたほうがよいです。


というわけで、NOMINMAXを定義しても問題が起きることはほとんどないことは分かりました。とはいえ、ヘッダでNOMINMAXを定義すると利用者を混乱させることになりかねません。
そこで、今後はヘッダには細工をせず、ソースファイルの先頭でNOMINMAXを定義するという方法を使うことにしました。
しばらくこの方針でやってみます。