使用单词"not"作为C ++类的名称会导致VS2019错误



我正在将现有项目迁移到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没有定义逻辑运算符的替代令牌?

最新更新