Patches for libstdc++ need to be sent to both the gcc-patches list and libstdc++ list, or they will be ignored.
Removing the std::iterator base classes is an ABI break, so not acceptable. std::iterator is deprecated, but that doesn't the library can't use it. Even after it gets removed, we can continue to define it as a non-standard extension, see the similar comments at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91260 If you want to add deprecated warnings to std::iterator that's fine, but you'll need to also use #pragma to prevent uses within libstdc++ from giving any warnings. One way to do that would be to introduce a new class template that uses std::iterator and replaces all uses of std::iterator with that: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated" template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, typename _Pointer = _Tp*, typename _Reference = _Tp&> struct __iterator : iterator<_Category, _Tp, _Distance, _Pointer, _Reference> { }; #pragma GCC diagnostic pop Ths will allow the library to use it without warnings, but user code that refers to std::iterator will get warnings. That would be a much simpler patch too. We could also consider making it an alias template for C++11, to avoid the cost of another class template instantiation: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated" template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, typename _Pointer = _Tp*, typename _Reference = _Tp&> #if __cplusplus < 201103L struct __iterator : iterator<_Category, _Tp, _Distance, _Pointer, _Reference> { }; #else using __iterator = iterator<_Category, _Tp, _Distance, _Pointer, _Reference>; #pragma GCC diagnostic pop