From 0114d19a4636eb594b4b200a7c6ebc9b89d38e47 Mon Sep 17 00:00:00 2001 From: Daniela Engert Date: Mon, 1 Jan 2018 16:42:45 +0100 Subject: [PATCH] Inheriting std::iterator is deprecated in C++17 Therefore replace inheritance by lifting std::iterator's members into the derived class. Signed-off-by: Daniela Engert --- .../coroutine2/detail/pull_coroutine.hpp | 24 ++++++++++++++----- .../coroutine2/detail/push_coroutine.hpp | 16 +++++++++++-- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/include/boost/coroutine2/detail/pull_coroutine.hpp b/include/boost/coroutine2/detail/pull_coroutine.hpp index 928a477..c8ea49f 100644 --- a/include/boost/coroutine2/detail/pull_coroutine.hpp +++ b/include/boost/coroutine2/detail/pull_coroutine.hpp @@ -68,7 +68,7 @@ public: T get() noexcept; - class iterator : public std::iterator< std::input_iterator_tag, typename std::remove_reference< T >::type > { + class iterator { private: pull_coroutine< T > * c_{ nullptr }; @@ -88,8 +88,14 @@ public: } public: - typedef typename iterator::pointer pointer_t; - typedef typename iterator::reference reference_t; + typedef std::input_iterator_tag iterator_category; + typedef typename std::remove_reference< T >::type value_type; + typedef std::ptrdiff_t difference_type; + typedef value_type * pointer; + typedef value_type & reference; + + typedef pointer pointer_t; + typedef reference reference_t; iterator() noexcept = default; @@ -179,7 +185,7 @@ public: T & get() noexcept; - class iterator : public std::iterator< std::input_iterator_tag, typename std::remove_reference< T >::type > { + class iterator { private: pull_coroutine< T & > * c_{ nullptr }; @@ -199,8 +205,14 @@ public: } public: - typedef typename iterator::pointer pointer_t; - typedef typename iterator::reference reference_t; + typedef std::input_iterator_tag iterator_category; + typedef typename std::remove_reference< T >::type value_type; + typedef std::ptrdiff_t difference_type; + typedef value_type * pointer; + typedef value_type & reference; + + typedef pointer pointer_t; + typedef reference reference_t; iterator() noexcept = default; diff --git a/include/boost/coroutine2/detail/push_coroutine.hpp b/include/boost/coroutine2/detail/push_coroutine.hpp index e68c880..4b5ba5c 100644 --- a/include/boost/coroutine2/detail/push_coroutine.hpp +++ b/include/boost/coroutine2/detail/push_coroutine.hpp @@ -66,11 +66,17 @@ public: bool operator!() const noexcept; - class iterator : public std::iterator< std::output_iterator_tag, void, void, void, void > { + class iterator { private: push_coroutine< T > * c_{ nullptr }; public: + typedef std::output_iterator_tag iterator_category; + typedef void value_type; + typedef void difference_type; + typedef void pointer; + typedef void reference; + iterator() noexcept = default; explicit iterator( push_coroutine< T > * c) noexcept : @@ -143,11 +149,17 @@ public: bool operator!() const noexcept; - class iterator : public std::iterator< std::output_iterator_tag, void, void, void, void > { + class iterator { private: push_coroutine< T & > * c_{ nullptr }; public: + typedef std::output_iterator_tag iterator_category; + typedef void value_type; + typedef void difference_type; + typedef void pointer; + typedef void reference; + iterator() noexcept = default; explicit iterator( push_coroutine< T & > * c) noexcept :