Windows下用vs编译std::numeric_limits::max()
和 std::numeric_limits::min()时,出现如下错误:
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
error C2059: syntax error : '::'
原因:
Windef.h中已经定义了
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
所以才会产生编译错误
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
解决办法是把std里的max和min用括号括起来,避免和windows定义的宏混淆,如下
(std::numeric_limits::max)()
(std::numeric_limits::min)()