是否有任何旧版本的 {fmt} 支持 C++98?

Do any old versions of {fmt} support C++98?

提问人:Matt Gigli 提问时间:9/8/2023 最后编辑:vitautMatt Gigli 更新时间:9/9/2023 访问量:252

问:

我使用传统编译器(C++98),并希望使用{fmt}将字符串格式化为std::ostream。是否有任何适用于 C++98 的 {fmt} 版本,或者 C++11 一直是必需的?

我尝试使用 godbolt,将 -std=c++98 添加到编译标志中,使用 GitHub 中最古老的标签,并得到一个非常具体的错误:

错误:#error 此文件需要编译器和库支持 ISO C++ 2011 标准。必须使用 -std=c++11 或 -std=gnu++11 编译器选项启用此支持。

C++ C++98 FMT

评论

0赞 Eljay 9/8/2023
{fmt}库不支持 C++98。您可以尝试移植它。您只需要专注于您使用的零件。
1赞 Dirk Eddelbuettel 9/8/2023
您可能不得不满足于 tinyfmt:github.com/c42f/tinyformat
2赞 teapot418 9/8/2023
github.com/fmtlib/fmt/issues/1066 <-“对于 C++98 支持,请使用版本 4.1”
7赞 Jesper Juhl 9/8/2023
它不适用于 C++98。最简单的解决方法可能是进入当前的千禧年并升级您的工具以使用不古老的 C++ 版本(这样做有很多好处,而不仅仅是 fmt)。
1赞 Red.Wave 9/8/2023
不。它需要可变参数模板;C++11 的核心功能。C++98是古老的历史。良好的实践意味着 C++23 或至少 C++20。

答:

2赞 vitaut 9/9/2023 #1

{fmt} 4.1 是支持 C++98 的最后一个版本。从版本 5.0 开始,{fmt} 需要 C++11 的子集,引用发行说明

添加了对部分 C++11 支持的要求,最重要的是可变参数模板和类型特征,并删除了仿真宏。可变参数模板自 GCC 4.4、Clang 2.9 和 MSVC 18.0 (2013) 起可用。对于较旧的编译器,请使用 {fmt} 版本 4.x,该版本将继续维护并与 C++98 编译器一起使用。FMT_VARIADIC_*