我正在将现有项目迁移到VS2019。具有在所有以前的版本中成功编译的非常简单的结构:
template <class Marker>
struct not
{
// ...
错误C2332:"struct":缺少标记名
NOTE-1我已经通过预编译生成检查了not
没有被一些宏取代,*.i
文件的输出与上的声明完全匹配
NOTE-2当然,如果我重命名not
->inv
,那么所有东西都是正确的
not
是C++中的关键字,不能用作类名。
请参阅cppreference上的关键字列表。
not
是!
的一个替代运算符,即C++关键字,因此不能在命名中使用。
请参阅文档。
not
是标准C++中的一个关键字,可以用作!
令牌的替代项。
默认情况下,MSVC不支持备用操作员令牌。因此,它们可以作为标识符使用,并且在声明中不会出现错误。
但在符合/permissive-
编译器标志的模式下,这些标记被视为具有标准含义的关键字,因此它们不能用作标识符。
我建议不要使用not
作为标识符,即使不使用符合性模式,因为这会使代码变得非标准和不可移植。
参见https://learn.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance
为什么VS没有定义逻辑运算符的替代令牌?