C++11からstd::minとstd::maxは複数の引数を受け取ることができるようになりました。
#include <algorithm>
int i = std::min({1, 2, 3, 4});
ところが、Visual Studioで上記のコードを実行するとコンパイルエラーになります。
原因は、windows.hにmin/maxのマクロが定義されているため。
マイクロソフトのページにある解決策は、「NOMINMAXのプリプロセッサシンボルを定義します。」とあります。
しかし、それができない状況もあります。
他の回避策が「windows.hのmin/maxマクロ回避策4パターン – yohhoyの日記」に紹介されていました。
(std::min)(…)や(std::max)(…)のように、括弧で囲みマクロ展開を抑止することで問題を回避できます。
#include <algorithm>
int i = (std::min)({1, 2, 3, 4});
これでエラーにならなくなりました。