std::iterator considered as deprecated since C++17 and shouldn't be in use. This patch marks std::iterator as deprecated using deprecated attribute, and replace its usages with the required member types inside each class.
libstdc++-v3/include/bits/ChangeLog: stl_iterator_base_types.h: Add deprecated attribute to std::iterator. stl_bvector.h: Replace std::iterator usage with required member types. stl_iterator.h: Replace std::iterator usage with required member types. stl_raw_storage_iter.h: Replace std::iterator usage with required member types. stream_iterator.h: Replace std::iterator usage with required member types. streambuf_iterator.h: Replace std::iterator usage with required member types. libstdc++-v3/include/ext/ChangeLog: rope: Replace std::iterator usage with required member types. ----------------------------------------------------------------------------------------------- diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index d6f5435..e92b895 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -140,8 +140,25 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER #endif struct _Bit_iterator_base +#if __cplusplus < 201703L : public std::iterator<std::random_access_iterator_tag, bool> +#endif { +#if __cplusplus >= 201703L // C++17 + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = std::random_access_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = bool; + /// Distance between iterators is represented as this type. + using difference_type = ptrdiff_t; + /// This type represents a pointer-to-value_type. + using pointer = bool*; + /// This type represents a reference-to-value_type. + using reference = bool&; + // END: Iterator base types +#endif + _Bit_type * _M_p; unsigned int _M_offset; diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index 2259f7c..13d5dbb 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -124,12 +124,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Iterator> class reverse_iterator +#if __cplusplus < 201703L : public iterator<typename iterator_traits<_Iterator>::iterator_category, typename iterator_traits<_Iterator>::value_type, typename iterator_traits<_Iterator>::difference_type, typename iterator_traits<_Iterator>::pointer, typename iterator_traits<_Iterator>::reference> +#endif { +#if __cplusplus >= 201703L // C++17 + protected: + typedef iterator_traits<_Iterator> __traits_type; + + public: + // BEGIN: Iterator base types +#if !__cpp_lib_concepts + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = typename __traits_type::iterator_category; +#endif + /// The type "pointed to" by the iterator. + using value_type = typename __traits_type::value_type; + /// Distance between iterators is represented as this type. + using difference_type = typename __traits_type::difference_type; + /// This type represents a pointer-to-value_type. + using pointer = typename __traits_type::pointer; + /// This type represents a reference-to-value_type. + using reference = typename __traits_type::reference; + // END: Iterator base types + private: +#endif template<typename _Iter> friend class reverse_iterator; @@ -143,14 +166,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION protected: _Iterator current; - +#if __cplusplus < 201703L typedef iterator_traits<_Iterator> __traits_type; - +#endif public: typedef _Iterator iterator_type; - typedef typename __traits_type::difference_type difference_type; +#if __cplusplus < 201703L + typedef typename __traits_type::difference_type difference_type; typedef typename __traits_type::pointer pointer; typedef typename __traits_type::reference reference; +#endif #if __cplusplus > 201703L && __cpp_lib_concepts using iterator_concept @@ -625,8 +650,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Container> class back_insert_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; +#if __cplusplus <= 201703L + /// Distance between iterators is represented as this type. + using difference_type = void; +#endif + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif + protected: _Container* container; @@ -728,8 +773,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Container> class front_insert_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; +#if __cplusplus <= 201703L + /// Distance between iterators is represented as this type. + using difference_type = void; +#endif + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif + protected: _Container* container; @@ -835,8 +900,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Container> class insert_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; +#if __cplusplus <= 201703L || ! defined __cpp_lib_concepts + /// Distance between iterators is represented as this type. + using difference_type = void; +#endif + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif + #if __cplusplus > 201703L && defined __cpp_lib_concepts using _Iter = std::__detail::__range_iter_t<_Container>; diff --git a/libstdc++-v3/include/bits/stl_iterator_base_types.h b/libstdc++-v3/include/bits/stl_iterator_base_types.h index aa02af5..a959dec 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_types.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_types.h @@ -124,7 +124,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, typename _Pointer = _Tp*, typename _Reference = _Tp&> +#if __cplusplus >= 201703L // C++17 + struct [[deprecated]] iterator +#else struct iterator +#endif { /// One of the @link iterator_tags tag types@endlink. typedef _Category iterator_category; diff --git a/libstdc++-v3/include/bits/stl_raw_storage_iter.h b/libstdc++-v3/include/bits/stl_raw_storage_iter.h index df7a5f9..8eb8835 100644 --- a/libstdc++-v3/include/bits/stl_raw_storage_iter.h +++ b/libstdc++-v3/include/bits/stl_raw_storage_iter.h @@ -66,8 +66,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template <class _OutputIterator, class _Tp> class raw_storage_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; + /// Distance between iterators is represented as this type. + using difference_type = void; + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif protected: _OutputIterator _M_iter; diff --git a/libstdc++-v3/include/bits/stream_iterator.h b/libstdc++-v3/include/bits/stream_iterator.h index bd5ba2a..a264cb8 100644 --- a/libstdc++-v3/include/bits/stream_iterator.h +++ b/libstdc++-v3/include/bits/stream_iterator.h @@ -47,8 +47,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Tp, typename _CharT = char, typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t> class istream_iterator +#if __cplusplus < 201703L : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = input_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = _Tp; + /// Distance between iterators is represented as this type. + using difference_type = _Dist; + /// This type represents a pointer-to-value_type. + using pointer = const _Tp*; + /// This type represents a reference-to-value_type. + using reference = const _Tp&; + // END: Iterator base types +#endif + public: typedef _CharT char_type; typedef _Traits traits_type; @@ -174,8 +192,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Tp, typename _CharT = char, typename _Traits = char_traits<_CharT> > class ostream_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; +#if __cplusplus == 201703L + /// Distance between iterators is represented as this type. + using difference_type = void; +#endif + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif + public: //@{ /// Public typedef diff --git a/libstdc++-v3/include/bits/streambuf_iterator.h b/libstdc++-v3/include/bits/streambuf_iterator.h index 184c82c..eda5648 100644 --- a/libstdc++-v3/include/bits/streambuf_iterator.h +++ b/libstdc++-v3/include/bits/streambuf_iterator.h @@ -48,9 +48,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Provides input iterator semantics for streambufs. template<typename _CharT, typename _Traits> class istreambuf_iterator +#if __cplusplus < 201703L : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type, _CharT*, _CharT> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = input_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = _CharT; + /// Distance between iterators is represented as this type. + using difference_type = typename _Traits::off_type; +#if __cplusplus == 201703L + /// This type represents a pointer-to-value_type. + using pointer = _CharT*; +#endif + /// This type represents a reference-to-value_type. + using reference = _CharT; + // END: Iterator base types +#endif + public: // Types: //@{ @@ -236,8 +256,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Provides output iterator semantics for streambufs. template<typename _CharT, typename _Traits> class ostreambuf_iterator +#if __cplusplus < 201703L : public iterator<output_iterator_tag, void, void, void, void> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = output_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = void; +#if __cplusplus == 201703L + /// Distance between iterators is represented as this type. + using difference_type = void; +#endif + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif + public: // Types: //@{ diff --git a/libstdc++-v3/include/ext/rope b/libstdc++-v3/include/ext/rope index fb7bdb0..86a0549 100644 --- a/libstdc++-v3/include/ext/rope +++ b/libstdc++-v3/include/ext/rope @@ -173,10 +173,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<class _Sequence, std::size_t _Buf_sz = 100> class sequence_buffer +#if __cplusplus < 201703L : public std::iterator<std::output_iterator_tag, void, void, void, void> +#endif { public: typedef typename _Sequence::value_type value_type; +#if __cplusplus >= 201703L // C++17 + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = std::output_iterator_tag; + /// Distance between iterators is represented as this type. + using difference_type = void; + /// This type represents a pointer-to-value_type. + using pointer = void; + /// This type represents a reference-to-value_type. + using reference = void; + // END: Iterator base types +#endif protected: _Sequence* _M_prefix; value_type _M_buffer[_Buf_sz]; @@ -1054,8 +1068,27 @@ protected: template<class _CharT, class _Alloc> class _Rope_iterator_base +#if __cplusplus < 201703L : public std::iterator<std::random_access_iterator_tag, _CharT> +#endif { +#if __cplusplus >= 201703L // C++17 + public: + // BEGIN: Iterator base types + /// One of the @link iterator_tags tag types@endlink. + using iterator_category = std::random_access_iterator_tag; + /// The type "pointed to" by the iterator. + using value_type = _CharT; + /// Distance between iterators is represented as this type. + using difference_type = ptrdiff_t; + /// This type represents a pointer-to-value_type. + using pointer = _CharT*; + /// This type represents a reference-to-value_type. + using reference = _CharT&; + // END: Iterator base types + private: +#endif + friend class rope<_CharT, _Alloc>; public: typedef _Alloc _allocator_type; // used in _Rope_rotate, VC++ workaround