windef.hのバカヤローヽ(`Д´)ノ

C++標準ライブラリのstd::numeric_limits<>::maxを使おうとしたところ何故かコンパイルエラーが。
maxの定義を調べていると、windef.h内でこんなマクロが定義されていた。

#define max(a,b)            (((a) > (b)) ? (a) : (b)) 

こいつか・・・こいつのせいでプリプロセッサが::max()をマクロとして展開して、コンパイラ

std::numeric_limits<float>::(((a) > (b)) ? (a) : (b)) 

みたいな不可解な表記にエラーを吐いたと。
とりあえず

#define NOMINMAX

を定義してやればこのマクロを頃すことができるようだ。
プリプロセッサってやつは非常に強力で、スコープもネームスペースもおかまいなしにマクロ展開してくれやがるので、時たまこういう問題に悩まされる。せめてmax,minなんてありがちな名前で#defineするのは勘弁して欲しい。
ちなみに、このmax、minマクロに相当するものとしてC++ならstd::maxのようなtemplate関数があるのでこっちを使おう。型チェックがあって安全だし。

お前らなんでもかんでもDEFINEすんじゃねぇ