如何在CMake项目中使用C++20的<format>?

37

我想在C++20中使用可用的<format>头文件。

我正在使用最新版本的CMake。

我的CMakeFiles看起来像:

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")

我正在使用Clang 9编译器。

然而,当包含<format>时,我遇到了以下错误:

fatal error: 'format' file not found
#include <format>

我也尝试使用了标志-std=c++2a,但没有效果。如何使用C++20的<format>


5
好消息!MSVC现在支持文本格式化。 - Hunter Kohler
1个回答

28
根据cppreference上的C++编译器支持页面(存档),C++20的<format>功能已被以下版本完全支持:
- GCC libstdc++ 13; - MSVC STL 19.29(Visual Studio 2019 16.10);以及 - Clang libc++ 17.* 升级到这些版本后,您将能够正常使用#include <format>
如果由于某种原因升级不是一个选择,你仍然可以使用{fmt}库,该库是C++20标准化<format>库的基础。C++20 <format>库与{fmt}库之间存在微小差异

* 自Clang libc++ 14起,可以通过-fexperimental-library编译器标志来获得实验性支持。


2
我想知道为什么会这样。实现<format>难道很困难吗?像“概念”这样更复杂的部分似乎已经被大多数编译器支持了。 - Ayxan Haqverdili
2
@Ayxan Concepts 最初是一个 TS,许多编译器在几年前就已经开始工作了。然而,<format> 主要只是标准化的 fmt 库。 - L. F.
我在搜索另一个支持的C++20特性时遇到了这篇文章,并跟随了您的链接。表格有些变化,但“文本格式化”仍然是全部红色。 @Tak Makoni:如果您使用MSVC,则可以在此处查看每个MSVC版本支持的功能列表:https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=vs-2019 - Martin
1
现在GCC、Clang(部分支持)和MSVC都支持文本格式化,因此这个答案已经过时了。 - Noughtmare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接