2017-06-09 53 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定義該宏。