2017-06-09 33 views
1

Eclipse CDT的抱怨,以下是语法错误,虽然它编译罚款与g++-7 -std=c++17Eclipse CDT的突出static_assert(条件)的语法错误

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

虽然它没有以下抱怨:

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

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

在附注中,即使使用-std=c++11,g ++ 7.1也适用于这两种表单。

谢谢!

回答

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