error C2589: “(”:“::”右边的非法标记

在引用MQTT的C++动态库时候,在控制台程序测试没问题,但是移到MFC下就会出现 

warning C4003: “max”宏的实参不足 
error C2589: “(”: “::”右边的非法标记 
error C2059: 语法错误 : “::” 
error C2059: 语法错误 : “)” 
error C2059: 语法错误 : “)”

这样的报错,双击报错定位到下面一行

error C2589: “(”:“::”右边的非法标记

经过查找原因,MFC引入的一大堆头文件里,Microsoft定义了min/max两个宏,虽然以上代码在自己的namespace里,可还是被被认为是微软定义的宏了;

解决方案:

1,改变代码种的名称,防止跟微软定义的重复

2,加上括号,把max前后用小括号括起来

static constexpr size_type MAX_CAPACITY = (std::numeric_limits<size_type>::max)();