如何测试decltype的可用性?

时间:2014-08-12 08:58:56

标签: c++ c++11 decltype

我有一个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,但它不起作用。

2 个答案:

答案 0 :(得分:6)

您可以尝试使用__cplusplus预定义宏的值。对于C ++ 11,它是201103L。对于较旧的编译器,它应该是一个较小的数字。

答案 1 :(得分:5)

可能您应该使用Boost.Config并检查BOOST_NO_CXX11_DECLTYPE宏。