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 <dani@ngrt.de>
This commit is contained in:
Daniela Engert 2018-01-01 16:42:45 +01:00
parent 3e074ab9dc
commit 0114d19a46
No known key found for this signature in database
GPG Key ID: 7B95EE52040C5975
2 changed files with 32 additions and 8 deletions

View File

@ -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;

View File

@ -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 :