https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113500
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Hirthammer from comment #5) > This whole thing with std::format and std::chrono::time_point is currently a > total minefield. That seems like an exaggeration. > In MSVC it is even more complicated and I already reported > the bug in October 2023. See: > > https://developercommunity.visualstudio.com/t/Using-std::format-with- > unsigned-integer-/10501153 > > If you change the clock to utc_clock or gps_clock the code compiles with > MSVC (but not with GCC) on Compiler Explorer. It compiles fine with GCC for me. > I don't know much about the exact definitions of the standard. But I find it > very confusing if std::format generally supports a std::chrono::time_point > as an input, but depending on the chosen template arguments of the > time_point it does or does not compile. That's because operator<< is not defined in general for time_point, only for specific clocks. It's defined for utc_time and gps_time unconditionally. It's only defined for sys_time for non-floating-point representations and periods less than a day: https://en.cppreference.com/w/cpp/chrono/system_clock/operator_ltlt Because std::format for chrono types is specified to use operator<< in some cases, that constraint for sys_time also affects std::format.