diff --git a/aten/src/ATen/core/Dict.h b/aten/src/ATen/core/Dict.h index 7ae106b6618cf..c4fb44ce0c636 100644 --- a/aten/src/ATen/core/Dict.h +++ b/aten/src/ATen/core/Dict.h @@ -101,8 +101,15 @@ class DictEntryRef final { // this wraps map_type::iterator to make sure user code can't rely // on it being the type of the underlying map. template -class DictIterator final : public std::iterator> { +class DictIterator final { public: + // C++17 friendly std::iterator implementation + using iterator_category = std::forward_iterator_tag; + using value_type = DictEntryRef; + using difference_type = std::ptrdiff_t; + using pointer = value_type*; + using reference = value_type&; + explicit DictIterator() = default; ~DictIterator() = default; @@ -136,7 +143,7 @@ class DictIterator final : public std::iterator>::difference_type operator-(const DictIterator& lhs, const DictIterator& rhs) { + friend difference_type operator-(const DictIterator& lhs, const DictIterator& rhs) { return lhs.entryRef_.iterator_ - rhs.entryRef_.iterator_; } diff --git a/aten/src/ATen/core/IListRef.h b/aten/src/ATen/core/IListRef.h index 0b0ff67b02e2d..340e519f43dbc 100644 --- a/aten/src/ATen/core/IListRef.h +++ b/aten/src/ATen/core/IListRef.h @@ -359,7 +359,7 @@ using MaterializedIListRef = std::vector>; * than 0. */ template -class IListRefIterator : public std::iterator { +class IListRefIterator { private: #define DEFINE_FRIEND_CLASS(TAG, ...) \ friend class detail::IListRefTagImpl; \ @@ -371,6 +371,13 @@ class IListRefIterator : public std::iterator::list_type::const_iterator; using boxed_iterator_type = typename detail:: diff --git a/aten/src/ATen/core/List.h b/aten/src/ATen/core/List.h index fe75bf37cb7fa..610417774774c 100644 --- a/aten/src/ATen/core/List.h +++ b/aten/src/ATen/core/List.h @@ -111,13 +111,15 @@ class ListElementReference final { // this wraps vector::iterator to make sure user code can't rely // on it being the type of the underlying vector. template -class ListIterator final : public std::iterator< - std::random_access_iterator_tag, - T, - std::ptrdiff_t, - T*, - ListElementReference> { +class ListIterator final { public: + // C++17 friendly std::iterator implementation + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = std::ptrdiff_t; + using pointer = T*; + using reference = ListElementReference; + explicit ListIterator() = default; ~ListIterator() = default; @@ -166,7 +168,7 @@ class ListIterator final : public std::iterator< return ListIterator{iterator_ - offset}; } - friend typename std::iterator::difference_type operator-(const ListIterator& lhs, const ListIterator& rhs) { + friend difference_type operator-(const ListIterator& lhs, const ListIterator& rhs) { return lhs.iterator_ - rhs.iterator_; }