不能在 c++20 中使用 std::format

Can't use std::format in c++20

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

According to this, text formatting should be supported by clang

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

14*

下面写着:

* - hover over the version number to see notes

当你悬停时,它会显示:

The paper is implemented but still marked as an incomplete feature. Not yet implemented LWG-issues will cause API and ABI breakage.

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

总而言之,在主要语言实现中文本格式的标准实现完成、稳定和non-experimental之前,最好使用第三方格式库。


其他注意事项:

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

std::format is not complete in libc++ 14 so is disabled by default. You need to pass the LIBCXX_ENABLE_INCOMPLETE_FEATURES parameter 在构建 llvm 以启用该功能时。

在 libc++ 实现完成之前,您最好使用 https://github.com/fmtlib/fmt(这也会使您的代码更具可移植性,因为 MSVC 目前是唯一具有完整实现的编译器)。