【发布时间】:2012-08-09 15:00:36
【问题描述】:
检查标准库的特定 C++11 功能是否存在的好方法。
对于编译器功能,我只是顺便检查了 (IMHO) 主要编译器的编译器版本(VC++、gcc、clang 目前,也许 Intel) 虽然这不是最好和最灵活的方法,但我不知道有什么更好的方法,除了 clang 具有真正的不错 __has_feature 宏。
但对于与编译器没有那么严格耦合的库功能来说,情况就更糟了。目前,我想使用相同的方法来检查 VC++ 的编译器版本(假设它使用自己的库,这很容易)。对于clang,我至少可以将__has_include 用于大规模基于标头的查询。除此之外,我想检查 __GLIBCXX__ 的值是否已定义可能是一个好主意,但是我再次找不到任何关于哪些特定 libstdc++ 版本引入了哪些功能的信息,而不是当前版本支持。
这些方法应该保留给预处理器检查等,因为我想在没有任何复杂配置过程并且不使用任何第三方库(是的,boost em> 是第三方)。
那么,在那些(相当狭窄的)条件下,我检查特定 C++11 库功能的可能性是什么。甚至可能在声明的特定函数或类型的规模上?
如果检查编译器或库版本仍然是最佳方法,我在哪里可以找到有关 的特定 版本支持的特定 C++11 功能的详细信息libstdc++(也许还有其他重要的,libc++)?
FWIW 目前我对 <cstdint>、C++11 <cmath> 函数和 std::hash 感兴趣,但这可能会改变,对于一般方法来说可能并不重要。
【问题讨论】:
标签: c++ visual-c++ c++11 libstdc++ libc++