gpt4 book ai didi

c++ - 如何检测 Clang 中的 libstdc++ 版本?

转载 作者:可可西里 更新时间:2023-11-01 16:47:52 28 4
gpt4 key购买 nike

我想用 Clang 编写一个“可移植”的 C++ 库。 “可移植”意味着我检测(在 C 预处理器中)编译环境中有哪些 C++ 功能可用,并使用这些功能或提供我的解决方法。这类似于 Boost 库正在做的事情。

但是,某些功能的存在不取决于语言,而是取决于标准库的实现。我特别感兴趣的是:

  • 类型特征(哪些是可用的,拼写是什么)
  • 如果 initializer_listconstexpr

我发现这有问题,因为默认情况下 Clang 不使用其自己的标准库实现:它使用 libstdc++。虽然 Clang 预定义了预处理器宏 __GNUC____GNUC_MINOR____GNUC_PATCHLEVEL__,但它们分别被硬编码为值 4、2、1,它们告诉我的很少关于可用的 libstdc++ 功能。

如何在 Clang 预处理器中检查它使用的是什么版本的 libstdc++?

最佳答案

Clang 确实带有自己的标准库实现,称为 libc++ .您可以通过将 -stdlib=libc++ 添加到您的编译命令来使用它。

也就是说,有多种方法可以检查 Clang/libstdc++ C++ 支持:

  1. Clang 有 __has_feature可用于检测语言特征和语言扩展的宏(和 friend )。
  2. Libstdc++ 有自己的版本宏,参见 the documentation .不过,您需要包含一个 libstdc++ header 来定义它们。
  3. GCC 具有您已经发现的版本宏,但需要手动将其与文档进行比较。

此外,这花了我 2 分钟的时间进行谷歌搜索。

关于c++ - 如何检测 Clang 中的 libstdc++ 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21622561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com