【发布时间】:2015-08-04 20:16:57
【问题描述】:
我正在尝试将[[deprecated]] 属性引入我的代码库。但是,并非我需要支持的所有编译器都支持这种语法(在标准化之前不同编译器使用的各种方法在attribute standardization proposal N2761 中进行了描述)。因此,我尝试在此属性中进行有条件地编译,首先使用__has_cpp_attribute 类宏函数(如果可用),如下所示:
#if defined(__has_cpp_attribute) && __has_cpp_attribute(deprecated)
#define DEPRECATED(msg) [[deprecated(msg)]]
#elif OTHER_COMPILER
// ...
#endif
但是,我在使用gcc version 4.9.2 (GCC),命令行gcc -std=c++14 cpp.cpp进行编译时遇到错误:
cpp.cpp:1:56: error: missing binary operator before token "("
#if defined(__has_cpp_attribute) && __has_cpp_attribute(deprecated)
此错误似乎表明__has_cpp_attribute 已定义,但它不是宏函数。在 gcc 中有条件地编译 [[deprecated]] 属性的正确方法是什么?
【问题讨论】:
-
@T.C.哦,它没有功能测试宏?
-
@Columbo 我在 gcc 5.1 发行说明中看到:gnu.org/software/gcc/gcc-5/changes.html,它说添加了
__has_cpp_attribute;所以我认为它在那之前不存在。