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
。
谢谢!
答案 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
中定义此宏。