I have the following template declaration:
template <typename T>
void IterTable(int& rIdx,
std::vector<double>& rVarVector,
const std::vector<T>& aTable,
const T aValue,
T aLowerBound = -(std::numeric_limits<T>::max()), //illegal token on right side of '::' shows here
bool aLeftOpen = true) const;
Which throws the illegal token error as noted, on the line with “-(std::numeric_limits::max())”. I got this code from some old linux source that I’m trying to compile on Windows. Any idea what the issue is?
Edit: It also fails using min(), and the compiler output is:
Error 92 error C2589: '::' : illegal token on right side of '::' c:\projects\r&d\prepaydll\include\cfcdefault.h 216 PrepayDLL
Error 93 error C2059: syntax error : '::' c:\projects\r&d\prepaydll\include\cfcdefault.h 216 PrepayDLL
Line 216, is the line previously mentioned.
My guess is that
maxhas been made a macro. This happens at some point insidewindows.h.Define
NOMINMAXprior to including to stopwindows.hfrom doing that.EDIT:
I’m still confident this is your problem. (Not including
<limits>would result in a different error). Place#undef maxand#undef minjust before the function and try again. If that fixes it, I was correct, and yourNOMINMAXisn’t being defined properly. (Add it as a project setting.)You can also prevent macro expansion by:
(std::numeric_limits<T>::max)().On a side note, why not do
std::numeric_limits<T>::min()instead of negating the max?