我想在Clang中编写一个“可移植”的C ++库。 “可移植”意味着我检测(在C预处理器中)编译环境中可用的C ++功能,并使用这些功能或提供我的解决方法。这类似于Boost库正在做的事情。
但是,某些功能的存在不取决于语言,而是取决于标准库实现。我特别感兴趣的是:
initializer_list
为constexpr
。 我发现这有问题,因为默认情况下Clang不使用自己的标准库实现:它使用libstdc ++。虽然Clang预定义了预处理器宏__GNUC__
,__GNUC_MINOR__
,__GNUC_PATCHLEVEL__
,但它们分别硬编码为值4,2,1,并且它们对可用的libstdc ++功能几乎没有说明。
如何在Clang预处理器中检查它正在使用的libstdc ++版本?
答案 0 :(得分:1)
Clang确实带有自己的标准库实现,它被称为libc++。您可以通过将-stdlib=libc++
添加到编译命令来使用它。
话虽如此,有多种方法可以检查Clang / libstdc ++ C ++支持:
__has_feature
宏(以及朋友),可用于检测语言功能和语言扩展。而且,这花了我2分钟的谷歌搜索。
答案 1 :(得分:0)
我认为这会有所帮助。它输出_LIBCPP_VERSION宏的值:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, const char * argv[])
{
cout<<"Value = "<<_LIBCPP_VERSION<<endl;
return 0;
}
再次编译所需信息的clang版本。