如何在编译时检测是否支持constexpr
How to detect if constexpr is supported at compile time
我目前在一个项目中工作,我们以多个平台为目标,我们的代码库是使用多个不同的编译器 (gcc/clang/vc++) 构建的。
对于我们的 windows 平台,我们使用目前不支持 'constexpr' 的 VS2013,我想知道除了检查我们是否在Windows且编译器版本低于VS2015.
这样我就可以决定何时使用模板元编程扩展具有编译时生成的成员的现有类型 - 涉及 constexpr 的使用 - 仅当它可用时。
这里有个愚蠢的建议:试着编译一小段包含 constexpr 的代码片段,然后检查是否有错误。
这里有两个建议。 Boost.Config 而这个 python 程序称为 "cxx11tests" (github.com/sloede/cxx11tests)。 运行 就这么简单:
CXX=g++ CXXFLAGS=-std=c++11 ./configure.py
make
对于 Boost,您需要的宏是 BOOST_NO_CXX11_CONSTEXPR
。
我目前在一个项目中工作,我们以多个平台为目标,我们的代码库是使用多个不同的编译器 (gcc/clang/vc++) 构建的。
对于我们的 windows 平台,我们使用目前不支持 'constexpr' 的 VS2013,我想知道除了检查我们是否在Windows且编译器版本低于VS2015.
这样我就可以决定何时使用模板元编程扩展具有编译时生成的成员的现有类型 - 涉及 constexpr 的使用 - 仅当它可用时。
这里有个愚蠢的建议:试着编译一小段包含 constexpr 的代码片段,然后检查是否有错误。
这里有两个建议。 Boost.Config 而这个 python 程序称为 "cxx11tests" (github.com/sloede/cxx11tests)。 运行 就这么简单:
CXX=g++ CXXFLAGS=-std=c++11 ./configure.py
make
对于 Boost,您需要的宏是 BOOST_NO_CXX11_CONSTEXPR
。