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

时间:2017-06-09 08:28:32

标签: c++ c++11 eclipse-cdt c++17

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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中定义此宏。