On 19/08/20 12:29 +0100, Jonathan Wakely wrote:
Back in 2017 I removed these prehistoric members (which were deprecated
since C++98) for C++17 mode. But I didn't add deprecated attributes to
most of them, so users didn't get any warning they would be going away.
Apparently some poor souls do actually use some of these names, and so
now that GCC 11 defaults to -std=gnu++17 some code has stopped
compiling.

This adds deprecated attributes to them, so that C++98/03/11/14 code
will get a warning if it uses them. I'll also backport this to the
release branches so that users can find out about the deprecation before
they start using C++17.

In order to give deprecated warnings even in C++98 mode this patch makes
_GLIBCXX_DEPRECATED work even for C++98, adds _GLIBCXX11_DEPRECATED for
the old meaning of _GLIBCXX_DEPRECATED, and adds new macros such as
_GLIBCXX_DEPRECATED_SUGGEST for suggesting alternatives to deprecated
features.

libstdc++-v3/ChangeLog:

        * include/bits/c++config (_GLIBCXX_DEPRECATED): Define for all
        standard modes.
        (_GLIBCXX_DEPRECATED_SUGGEST): New macro for "use 'foo' instead"
        message in deprecated warnings.
        (_GLIBCXX11_DEPRECATED, _GLIBCXX11_DEPRECATED_SUGGEST): New
        macros for marking features derpecated in C++11.
        (_GLIBCXX17_DEPRECATED_SUGGEST, _GLIBCXX20_DEPRECATED_SUGGEST):
        New macros.
        * include/backward/auto_ptr.h (auto_ptr_ref, auto_ptr<void>):
        Use _GLIBCXX11_DEPRECATED instead of _GLIBCXX_DEPRECATED.
        (auto_ptr): Use _GLIBCXX11_DEPRECATED_SUGGEST.
        * include/backward/binders.h (binder1st, binder2nd): Likewise.
        * include/bits/ios_base.h (io_state, open_mode, seek_dir)
        (streampos, streamoff): Use _GLIBCXX_DEPRECATED_SUGGEST.
        * include/std/streambuf (stossc): Replace C++11 attribute
        with _GLIBCXX_DEPRECATED_SUGGEST.
        * include/std/type_traits (__is_nullptr_t): Use
        _GLIBCXX_DEPRECATED_SUGGEST instead of _GLIBCXX_DEPRECATED.
        * testsuite/27_io/types/1.cc: Check for deprecated warnings.
        Also check for io_state, open_mode and seek_dir typedefs.

And this adds the new macros to the comment before their definitions.

Tested powerpc64le-linux. Committed to trunk.

commit 1e235788bbfc41f3eec1bb665d8e4bb2c63a1982
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Aug 19 12:42:02 2020

    libstdc++: Mention new macros in comments
    
    libstdc++-v3/ChangeLog:
    
            * include/bits/c++config (_GLIBCXX_DEPRECATED_SUGGEST)
            (_GLIBCXX11_DEPRECATED, _GLIBCXX11_DEPRECATED_SUGGEST)
            (_GLIBCXX17_DEPRECATED_SUGGEST, _GLIBCXX20_DEPRECATED_SUGGEST):
            Add new macros to comment.

diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 116faf64441..de28acea6b7 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -77,8 +77,13 @@
 // Macros for deprecated attributes.
 //   _GLIBCXX_USE_DEPRECATED
 //   _GLIBCXX_DEPRECATED
+//   _GLIBCXX_DEPRECATED_SUGGEST( string-literal )
+//   _GLIBCXX11_DEPRECATED
+//   _GLIBCXX11_DEPRECATED_SUGGEST( string-literal )
 //   _GLIBCXX17_DEPRECATED
+//   _GLIBCXX17_DEPRECATED_SUGGEST( string-literal )
 //   _GLIBCXX20_DEPRECATED( string-literal )
+//   _GLIBCXX20_DEPRECATED_SUGGEST( string-literal )
 #ifndef _GLIBCXX_USE_DEPRECATED
 # define _GLIBCXX_USE_DEPRECATED 1
 #endif

Reply via email to