检查 C++ 中关键字是否存在

ima*_*ett 4 c++

我正在编译一个使用 C++ 关键字“override”的 C++ 程序。

我在 Visual Studio 2010 中编译成功,但现在我需要在 g++ 上编译它。只有 g++ 4.6 可用(并且您需要 g++ 4.7 来支持“覆盖”)。

真正的解决方案是安装 g++ 4.7(现在正在发生),但这让我开始思考。是否有编译时检查来查看是否支持关键字?

我试过:

#ifndef override
    #define override
    #ifdef BUILD_WINDOWS
        #pragma message("The \"override\" keyword is not supported on this compiler!  Ignoring it!")
    #else
        #warning "The \"override\" keyword is not supported on this compiler!  Ignoring it!"
    #endif
#endif
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为“覆盖”不是一个符号。

我想要一些更通用的东西,而不是简单地检查编译器版本以查看它是否是支持该关键字的版本之一。如果可以的话,如何才能做到这一点?

mel*_*ene 5

我知道没有办法检查程序中的特定关键字。我能提供的最好的方法是检查特定编译器/编译器版本或语言/语言版本的特殊预定义宏。

对于前者,有

#if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
Run Code Online (Sandbox Code Playgroud)

对于后者,有

#if __cplusplus >= 201103L
Run Code Online (Sandbox Code Playgroud)