https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126675
--- Comment #6 from Marco Rubini <marco.rubini08 at gmail dot com> --- I'm sorry but I still do not understand; the __do_vformat_to symbol is already exported from libstdc++, the decision to export it has been made and committed to. Existing binaries compiled with -std=c++20 rely on the symbol being exported by libstdc++ or they will fail to link. libstdc++ users are not aware of this dependency because the explicit template declaration was not written by them. To avoid this committment, the explicit template declaration should never have been added to <format>, or even better, the explicit template instantiation should not have been added to format-ins.cc to avoid users manually linking against it and invoking Hyrum's Law. It is understandable to explicitly instantiate the template, export the symbol without documenting it, and telling the users that if they want the compile time benefits, they have to opt-in manually and handle possible ABI breakages. But libstdc++ already opted-in on behalf of the users. Just check this godbolt to verify: https://godbolt.org/z/c8q8zsW98 I'm sorry if I misunderstood your comment, but this part in particular "without committing to a stable ABI that must be exported from the shared library forever" makes completely no sense to me, considering the reasoning above, because my understanding is that libstdc++ committed to a stable ABI the moment it released <format> with an explicit template instantiation declaration.
