我試圖將[[deprecated]]
屬性引入我的代碼庫。然而,並非我需要支持的所有編譯器都支持這種語法(標準化之前由不同編譯器使用的各種方法在attribute standardization proposal N2761中描述)。因此,我試圖在這個屬性條件編譯,使用__has_cpp_attribute
類似於宏函數首先,如果是可用的,就像這樣:__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]]
屬性的正確方法是什麼?
@Columbo不是bug。 –
@ T.C。哦,它沒有功能測試宏? – Columbo
@Columbo我在gcc 5.1發行說明中看到:http://www.gnu.org/software/gcc/gcc-5/changes.html,它說'__has_cpp_attribute'被添加;所以我認爲它在此之前不存在。 – MuertoExcobito