我有一个C ++模块,它在C ++ 03上下文和C ++ 11上下文中编译。在将其编译为C ++ 11时,我使用decltype
来查找变量的类型。在C ++ 03中,我可以(出于我的目的)将decltype
定义为非标准typeof
的宏:
// add zero to get rid of const qualifier on the type
#define decltype(x) typeof((x) + 0)
当然,我想使用原始decltype
(如果可用),并仅在宏不可用时定义宏。如何测试decltype
的可用性?
我按照http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3694.htm的建议尝试了#ifndef __cpp_decltype
,但它不起作用。
答案 0 :(得分:6)
您可以尝试使用__cplusplus
预定义宏的值。对于C ++ 11,它是201103L
。对于较旧的编译器,它应该是一个较小的数字。
答案 1 :(得分:5)
可能您应该使用Boost.Config并检查BOOST_NO_CXX11_DECLTYPE
宏。