This line works correctly in a small test program, but in the program for which I want it, I get the following compiler complaints:
#include <limits>
x = std::numeric_limits<int>::max();
c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'
I get the same results with:
#include <limits>
using namespace std;
x = numeric_limits<int>::max();
Why is it seeing max as the macro max(a,b); ?
This commonly occurs when including a Windows header that defines a
minormaxmacro. If you're using Windows headers, put#define NOMINMAXin your code, or build with the equivalent compiler switch (i.e. use /DNOMINMAX for Visual Studio).Note that building with
NOMINMAXdisables use of the macro in your entire program. If you need to use theminormaxoperations, usestd::min()orstd::max()from the<algorithm>header.