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