マクロの呪いでお先真っ黒
boost_1_34_0のnumeric ublasのソースコードを読んでいると
std::swap_ranges (data_, data_ + (std::max) (size_, a.size_), a.data_);
という感じのstd::maxやstd::minを括弧で囲んだ式をちょくちょく見かける。
それは標準のテンプレート関数なんだけど、なぜこのような変な書き方をしているのだろうか。
そういえば昔、
#include <algorithm> #define min(a, b) "■■■" void hoge() { (std::min)(9, 6); }
cygwinのg++のstl_algobase.hではmin, maxを定義する前にmin, maxを#undefしていた。
min, maxマクロはいろんなところで悪さをしていたのかもしれない。