Does GCC support C++20 std::format?
Asked Answered
S

5

75

If it doesn't, do you know what compiler or version will?

See cppreference/format.

Shifflett answered 3/9, 2020 at 12:50 Comment(11)
Not another way of formatting output! When is this going to end? Still at least pi is now defined as a constant. (Personally I use the C style functions for output, and the C++ ones for input.)Entrap
gcc.gnu.org/projects/cxx-status.htmlSplenectomy
@Entrap ?! C++ did not have any adequate way of formatting output before the adoption of fmtlib into C++20. fmtlib has the only usable API and is additionally hands down the fastest formatter. fmtlib isn’t “another way of formatting output”, it’s the only generally usable way of formatting output in C++.Siskind
In particular, there's a link to library status on that page with poorly formatted tables, and if you search for 'text formatting' on that page, there are three rows pertaining to it, with empty column 'Status' each.Splenectomy
@KonradRudolph: Yes of course you have a point, but I would have much rather had a decimal floating point type before all this stuff. The committee could at least have humoured me by reserving decimal. Of course it would be _Decimal in C.Entrap
@Splenectomy I already read that document but was not able to find anything. No "text formatting" either.Shifflett
@Shifflett the link to lib status on that page, gcc.gnu.org/onlinedocs/libstdc++/manual/status.htmlSplenectomy
@PorssiMies: Alas that wasn't me, but Konrad. My contribution (if you can call it that) was little more than a rant about priorities.Entrap
@Shifflett Not implemented yet indeed but you can find some ersatz implementation which might be good enough, for examplePlatt
I am seriously wondering what takes them so long. Essentially that library has been written long ago as a separate project.Desperate
@Konrad Rudolph std::printf cries in corner...Latonya
M
43

EDIT: Support for format is available since GCC 13. For someone who want to find compiler support for another libraries or features, please refer to the compiler support link below from cppreference.com

Does gcc support C++20 std::format?

Not yet!

There's no compiler support yet, not even gcc 11. See Text formatting in Library features.

Compiler support for C++20 library features

Mongolian answered 3/9, 2020 at 12:55 Comment(4)
It's available with Visual Studio 2019 (16.10).Berkin
@Berkin Correct, but GCC does not support it yet. I hope newer versions of GCC 11 or 12 support it.Mongolian
It's not in GCC 11 (already the default compiler with openSUSE Tumbleweed), it would be great to get an update on any progress in GCC/libstdc++.Berkin
Still not available in gcc 11.2.1.Varioloid
L
95

It's 2023 Now! Cheers!

GCC 13, CLANG 14 and MSVC 16.10/VS 2019 all have the {fmt} based std::format available in respective standard libraries.

Hopefully we'll have C++23 std::print available soon.


See Compiler support here :-

Latonya answered 13/9, 2021 at 2:9 Comment(5)
Keep in mind though that {fmt} has more features than the C++20 <format>. So, if you plan to use it then do a one-for-one switch of fmt::format to std::format, you'll need to carefully select which features you use.Germiston
I like how this is being kept up to date.Warmup
gcc trunk has recently implemented text formattingB
funny. neither gcc nor clang can find the format include. i got the latest clang-17 and the latest gcc i can get on my system, which is version 12.1.0. am I doing something wrong? because everyone is "hooray, we got the new features", and clearly I do not.Codify
@Codify with clang you need to also use llvm's libc++, -stdlib=libc++ should do the trick. As for GCC, you need version 13 minimum.Latonya
M
43

EDIT: Support for format is available since GCC 13. For someone who want to find compiler support for another libraries or features, please refer to the compiler support link below from cppreference.com

Does gcc support C++20 std::format?

Not yet!

There's no compiler support yet, not even gcc 11. See Text formatting in Library features.

Compiler support for C++20 library features

Mongolian answered 3/9, 2020 at 12:55 Comment(4)
It's available with Visual Studio 2019 (16.10).Berkin
@Berkin Correct, but GCC does not support it yet. I hope newer versions of GCC 11 or 12 support it.Mongolian
It's not in GCC 11 (already the default compiler with openSUSE Tumbleweed), it would be great to get an update on any progress in GCC/libstdc++.Berkin
Still not available in gcc 11.2.1.Varioloid
A
21

As of today (December 12, 2023), GCC 13.1 does support this feature. Or rather, its standard library implementation does support it (cause it's a library feature, not the compiler-one) (link)

Also, you can try Clang 17.0.0 and upward for now. Also, but note following:

In libc++ of Clang 14.0.0 std::format support added but: "The paper is implemented but still marked as an incomplete feature. Not yet implemented LWG-issues will cause API and ABI breakage" (link)

In libc++ of Clang 15.0.0 and later, this feature can be enabled with the -fexperimental-library compiler flag (link)

Also, you can try MSVC 16.10 and upward. Support of std::format is mentioned as complete.


Standard library current status can be seen here:

Armagh answered 19/7, 2021 at 11:43 Comment(5)
I use clang17 and even with the -fexperimental-library flag it doesn't compile, complaining that it can't find #include <print> or #include <format>. Can you elaborate on how to make it work?Codify
@Codify are you using -stdlib=libc++ ? Here's an example: godbolt.org/z/K5ee4b9r4Armagh
If I use that it complains that it can't find iostream.Codify
But -fexperimental-library works only with -stdlib=libc++ because AFAIK Clang by default uses GCC's stdlibc++ and you have to manualy instruct it to use Clang's libc++. "If I use that it complains that it can't find iostream." - check if libc++ is installedArmagh
turns out discord was screwing me over with it's dependency on libc++-14. installing libc++17-dev and pointing clang to the libc++experimental library with -L solved the problem. discord is now a flatpak application for me.Codify
B
7

GCC 13 has added support for std::format. According to cppreference, as of GCC 13, no gaps remain in its C++20 support (in both the core language and the standard library).

This bugzilla ticket notes that some C++23 extensions to std::format have not yet been implemented.

GCC 13 can be expected around April 2023.

The GCC trunk installation on compiler explorer includes std::format support.

OpenSUSE Tumbleweed (as of 2023-03-19) and the upcoming Fedora 38 include GCC 13.

Berkin answered 21/11, 2022 at 17:37 Comment(2)
Is this not available in any of the latest clang versions? I see it only work on clang trunk. It works with gcc 13 and onwards now.Titanium
Correct, clang 17 will have support for C++20 std::format. en.cppreference.com/w/cpp/compiler_support/20Berkin
L
6

Now libstdc++ has implemented it! https://gcc.gnu.org/pipermail/libstdc++/2022-November/054991.html

Lyricist answered 15/11, 2022 at 2:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.