85

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

See cppreference/format.

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.) Commented Sep 3, 2020 at 12:51
  • 2
    gcc.gnu.org/projects/cxx-status.html Commented Sep 3, 2020 at 12:51
  • 21
    @Bathsheba ?! 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++. Commented Sep 3, 2020 at 12:54
  • 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. Commented Sep 3, 2020 at 12:56
  • 8
    I am seriously wondering what takes them so long. Essentially that library has been written long ago as a separate project. Commented Sep 15, 2021 at 19:06

5 Answers 5

109

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.

EDIT: std::print is now available on all 3 major compilers.


See Compiler support here :-

Sign up to request clarification or add additional context in comments.

5 Comments

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.
I like how this is being kept up to date.
gcc trunk has recently implemented text formatting
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.
@FalcoGer with clang you need to also use llvm's libc++, -stdlib=libc++ should do the trick. As for GCC, you need version 13 minimum.
48

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

4 Comments

It's available with Visual Studio 2019 (16.10).
@PFee Correct, but GCC does not support it yet. I hope newer versions of GCC 11 or 12 support it.
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++.
Still not available in gcc 11.2.1.
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:

5 Comments

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?
@FalcoGer are you using -stdlib=libc++ ? Here's an example: godbolt.org/z/K5ee4b9r4
If I use that it complains that it can't find iostream.
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 installed
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.
8

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.

2 Comments

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.
Correct, clang 17 will have support for C++20 std::format. en.cppreference.com/w/cpp/compiler_support/20
6

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.