https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120625

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:76bf78d32c683af3bf88f4aef595048edbd82372

commit r16-1462-g76bf78d32c683af3bf88f4aef595048edbd82372
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Jun 11 11:11:52 2025 +0100

    libstdc++: Do not specialize std::formatter for incomplete type [PR120625]

    Using an incomplete type as the template argument for std::formatter
    specializations causes problems for program-defined specializations of
    std::formatter which have constraints. When the compiler has to find
    which specialization of std::formatter to use for the incomplete type it
    considers the program-defined specializations and checks to see if their
    constraints are satisfied, which can give errors if the constraints
    cannot be checked for incomplete types.

    This replaces the base class of the disabled specializations with a
    concrete class __formatter_disabled, so there is no need to match a
    specialization and no more incomplete type.

    libstdc++-v3/ChangeLog:

            PR libstdc++/120625
            * include/std/format (__format::__disabled): Remove.
            (__formatter_disabled): New type.
            (formatter<char*, wchar_t>, formatter<const char*, wchar_t>)
            (formatter<char[N], wchar_t>, formatter<string, wchar_t>)
            (formatter<string_view, wchar_t>): Use __formatter_disabled as
            base class instead of formatter<__disabled, wchar_t>.
            * testsuite/std/format/formatter/120625.cc: New test.

    Reviewed-by: Tomasz KamiÅski <tkami...@redhat.com>

Reply via email to