检查标准库的特定 C++11 功能是否存在的好方法是什么。
对于编译器功能,我只是顺便检查了(恕我直言)主要编译器(目前VC++、gcc、clang,也许是Intel)的编译器版本虽然这不是最好和最灵活的方法,但我不知道任何更好的东西,除了具有非常好的宏的clang 。__has_feature
但对于与编译器没有那么严格耦合的库特性来说,情况就更糟了。目前,我想使用相同的方法检查VC++的编译器版本(假设它使用自己的库,这很容易)。对于clang,我至少可以__has_include
用于大规模的基于标头的查询。除此之外,我想检查__GLIBCXX__
's value if defined 可能是一个好主意,但是我又找不到任何关于特定libstdc++版本引入了哪些功能的信息,除了当前版本支持的内容。
这些方法应该保留给预处理器检查等,因为我想在没有任何复杂配置过程并且不使用任何第三方库(是的,boost是第三方的)的仅头文件库中使用它。
那么在那些(非常狭窄的)条件下,我检查特定 C++11 库功能的可能性是什么。甚至可能在声明的特定函数或类型的规模上?
如果检查编译器或库版本仍然是最好的方法,我在哪里可以找到有关特定版本的libstdc++(可能还有其他重要的,可能是libc++ )支持的特定 C++11 功能的详细信息?
FWIW 目前我对<cstdint>
C++11<cmath>
函数和感兴趣std::hash
,但这可能会改变,并且对于一般方法可能并不重要。