要約
https://cpprefjp.github.io/reference/format/format.html
string message = format("The answer is {}.", 42); // => "The answer is 42."
を読んで、
「最近の C++ は Python みたいなフォーマットで文字列の書式を指定できるようになったんか!めっちゃ便利やん!」
と思って C++20 で std::format を使おうとしたが、GCC
と libstdc++
ではまだ std::format() が実装されていなかったというお話
環境・バージョン
~$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
コンパイルしようとしたらエラーが発生
hello.cpp
#include <format>
#include <iostream>
int main()
{
std::cout << std::format("The answer is {}.", 42) << std::endl;
}
$ g++ -std=c++2a hello.cpp
hello.cpp:1:10: fatal error: format: No such file or directory
1 | #include <format>
| ^~~~~~~~
compilation terminated.
GCC libstdc++ のドキュメントを読んでみる
https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2020
「Text formatting」のStatus(実装されたバージョン) が空欄になっている
つまり、まだ実装されていないという状態...
回避策
A. std::format() が実装されているコンパイラを使う
https://en.cppreference.com/w/cpp/compiler_support
Clang libc++
と MSVC STL
は実装済なので、このどちらかを使う
B. {fmt} を使う
{fmt} は std::format の実装
依存関係を追加して、ライブラリを使えば良い
おわりに
C/C++ は文字列の書式周りがやや不便だなと感じました...