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

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

https://gcc.gnu.org/g:506cb05479ee04c724eb0ebde07d2e9062efb264

commit r15-9666-g506cb05479ee04c724eb0ebde07d2e9062efb264
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Fri May 9 10:23:05 2025 +0100

    libstdc++: Remove #warning from <ciso646> for C++17 [PR120187]

    Although <ciso646> was removed from C++20, it was not formally
    deprecated in C++17. In contrast, <ctgmath>, <cstdalign>, etc. were
    formally deprecated in C++17 before being removed in C++20.

    Due to the widespread convention of including <ciso646> to detect
    implementation-specific macros (such as _GLIBCXX_RELEASE) it causes
    quite a lot of noise to issue deprecation warnings in C++17 mode. The
    recommendation to include <version> instead does work for recent
    compilers, even in C++17 mode, but isn't portable to older compilers
    that don't provide <version> yet (e.g. GCC 8).

    There are also potential objections to including <version> pre-C++20
    when it wasn't defined by the standard. I don't have much sympathy for
    this position, because including <ciso646> for implementation-specific
    macros wasn't part of the C++17 standard either. It's no more
    non-standard to rely on <version> being present and defining those
    macros than to rely on <ciso646> defining them, and __has_include can be
    used to detect whether <version> is present. However, <ciso646> is being
    used in the wild by popular libraries like Abseil and we can't change
    versions of those that have already been released.

    This removes the #warning in <ciso646> for C++17 mode, so that we only
    emit diagnostics for C++20 and later. With this change, including
    <ciso646> in C++20 or later gives an error if _GLIBCXX_USE_DEPRECATED is
    defined to zero, otherwise a warning if -Wdeprecated is enabled,
    otherwise no diagnostic is given.

    This also adds "@since C++11 (removed in C++20)" to the Doxygen @file
    comments in all the relevant headers.

    The test for <ciso646> needs to be updated to no longer expect a warning
    for c++17_only. A new test is added to ensure that we get a warning
    instead of an error when -D_GLIBCXX_USE_DEPRECATED=0 is not used.

    libstdc++-v3/ChangeLog:

            PR libstdc++/120187
            * include/c_global/ciso646: Only give deprecated warning for
            C++20 and later.
            * include/c_global/ccomplex: Add @since to Doxygen comment.
            * include/c_global/cstdalign: Likewise.
            * include/c_global/cstdbool: Likewise.
            * include/c_global/ctgmath: Likewise.
            * testsuite/18_support/headers/ciso646/macros.cc: Remove
            dg-warning for c++17_only effective target.
            * testsuite/18_support/headers/ciso646/macros-2.cc: New test.

    Reviewed-by: Tomasz KamiÅski <tkami...@redhat.com>
    (cherry picked from commit af062510f4179aa7b13e632f77593deee8fe29f2)

Reply via email to