https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Author: redi Date: Fri Jan 10 15:27:39 2020 New Revision: 280116 URL: https://gcc.gnu.org/viewcvs?rev=280116&root=gcc&view=rev Log: libstdc++: Make istreambuf_iterator base class consistent (PR92285) Since LWG 445 was implemented for GCC 4.7, the std::iterator base class of std::istreambuf_iterator changes type depending on the -std mode used. This creates an ABI incompatibility between different -std modes. This change ensures the base class always has the same type. This makes layout for C++98 compatible with the current -std=gnu++14 default, but no longer compatible with C++98 code from previous releases. In practice this is unlikely to cause real problems, because it only affects the layout of types with two std::iterator base classes, one of which comes from std::istreambuf_iterator. Such types are expected to be vanishingly rare. PR libstdc++/92285 * include/bits/streambuf_iterator.h (istreambuf_iterator): Make type of base class independent of __cplusplus value. [__cplusplus < 201103L] (istreambuf_iterator::reference): Override the type defined in the base class * testsuite/24_iterators/istreambuf_iterator/92285.cc: New test. * testsuite/24_iterators/istreambuf_iterator/requirements/ base_classes.cc: Adjust expected base class for C++98. Added: trunk/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/92285.cc - copied, changed from r280109, trunk/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/streambuf_iterator.h trunk/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/requirements/base_classes.cc