https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110860
--- Comment #8 from Paul Dreik <gcc at pauldreik dot se> --- I do unfortunately not think the fix is entirely correct. When 0 is passed, log10 returns -inf, which can not be converted to an integer. I had a bit of problem to reproduce this with gcc, but it worked with clang. The following program: #include <cstdio> #include <format> #include <string_view> int main(int argc, char* argv[]) { [[maybe_unused]] auto x = std::format("{:.292f}", 0.f); } causes the following output when compiled with clang-16 using -fsanitize=undefined -fno-sanitize-recover=all -g -O0: /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/14.0.0/../../../../include/c++/14.0.0/format:1496:15: runtime error: -inf is outside the range of representable values of type 'unsigned long' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/14.0.0/../../../../include/c++/14.0.0/format:1496:15 in Link to reproducer (expected to go stale quick, had to use clang trunk to get a sufficiently new libstdc++): https://godbolt.org/z/8aGf7YGWs