Eclipse CDT 突出显示 static_assert(cond) 作为语法错误
Eclipse CDT highlights static_assert(cond) as syntax error
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
中定义此宏。
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
中定义此宏。