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 max has been made a macro. This happens at some point inside windows.h.
Define NOMINMAX prior to including to stop windows.h from doing that.
I'm still confident this is your problem. (Not including <limits> would result in a different error). Place #undef max and #undef min just before the function and try again. If that fixes it, I was correct, and your NOMINMAX isn'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?
Looks like you need to:
#include <limits>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With