Eclipse CDT 将 static_assert(cond) 突出显示为语法错误

Eclipse CDT highlights static_assert(cond) as syntax error

本文关键字:显示 错误 语法 cond CDT static assert Eclipse      更新时间:2023-10-16

Eclipse CDT抱怨以下内容在语法上是错误的,尽管它与g++-7 -std=c++17一起编译得很好:

static_assert(std::is_pod<T>::value);

虽然它不会抱怨以下内容:

static_assert(std::is_pod<T>::value, "not a POD");

我意识到 C++17 之前的static_assert需要第二个消息参数。 我很好奇 Eclipse 是否可以配置为识别第一种形式?(解决方法当然是使用 C++11 表单。

附带说明一下,g++ 7.1 对这两种形式都是可以的,即使使用-std=c++11也是如此。

谢谢!

Eclipse CDT 还没有任何 C++17 支持,因此它无法识别这种形式的static_assert

可以通过在代码中定义以下宏来解决此问题:

#define static_assert(cond) static_assert(cond, "")

如果您的编译器反对这样做,您可以将其置于__CDT_PARSER__宏上,以便只有 CDT 才能看到它,而不是编译器:

#ifdef __CDT_PARSER__
#define static_assert(cond) static_assert(cond, "")
#endif

如果您希望在不修改源文件的情况下应用此解决方法,则还可以在Project Properties | C/C++ General | Preprocessor Include Paths, Macros etc. | GNU C++ | CDT User Setting Entries中定义此宏。