无法在 c++20 中使用 std::format

Sae*_*eon 29 c++ clang++ fmt

我一直在尝试使用std::formatC++20中包含的函数。据我所知,clang 14 应该支持此功能,但由于某种原因我收到以下错误:no member named 'format' in namespace 'std'。根据cppreference 的编译器支持图表,clang 应该支持文本格式,但我仍然收到此错误。我不知道问题是什么。

Ala*_*les 24

std::format libc++ 14 中不完整,因此默认禁用。构建llvm时需要传递LIBCXX_ENABLE_INCOMPLETE_FEATURES参数才能启用该功能。

std::format现在在 libc++17 中完全可用。

如果您无法使用最新版本的 libc++ 可以使用https://github.com/fmtlib/fmt


eer*_*ika 8

据此,clang 应该支持文本格式

如果仔细观察,该单元格中有一个星号:

14*

下面,它说:

*- 将鼠标悬停在版本号上可查看注释

当你将鼠标悬停时,它会说:

该论文已实现,但仍标记为不完整的功能。尚未实施的 LWG 问题将导致 API 和 ABI 损坏。

未提及的是,默认情况下不启用不完整的功能。但这是有道理的,因为他们不希望用户依赖会破坏的 API/ABI。在我看来,正如这个问题所证明的那样,在该单元格中使用绿色是具有误导性的。

总之,最好使用第三方格式化库,直到文本格式化的标准实现在主要语言实现中完整、稳定且非实验性为止。


其他注意事项:

  • 您必须包含定义std::format.
  • Clang 默认情况下不使用 C++20,因此您必须显式指定它。
  • Clang 默认在 Linux 上使用 libstdc++ 标准库(为了与共享库兼容),因此在这种情况下,默认情况下您不会使用 Clang 的标准库,并且 libstdc++ 尚未实现文本格式化。