diff --git a/src/corelib/io/qdirlisting.cpp b/src/corelib/io/qdirlisting.cpp index a753dad13bd..db8e4ea4e29 100644 --- a/src/corelib/io/qdirlisting.cpp +++ b/src/corelib/io/qdirlisting.cpp @@ -725,8 +725,8 @@ QDirListing::const_iterator QDirListing::begin() const */ QDirListing::const_iterator &QDirListing::const_iterator::operator++() { - dirListPtr->advance(); - if (!dirListPtr->hasIterators()) + dirEntry.dirListPtr->advance(); + if (!dirEntry.dirListPtr->hasIterators()) *this = {}; // All done, make `this` equal to the end() iterator return *this; } diff --git a/src/corelib/io/qdirlisting.h b/src/corelib/io/qdirlisting.h index d4900556a3f..9d83411728c 100644 --- a/src/corelib/io/qdirlisting.h +++ b/src/corelib/io/qdirlisting.h @@ -103,8 +103,7 @@ public: class const_iterator { friend class QDirListing; - const_iterator(QDirListingPrivate *dp) : dirListPtr(dp) { dirEntry.dirListPtr = dp; } - QDirListingPrivate *dirListPtr = nullptr; + explicit const_iterator(QDirListingPrivate *dp) { dirEntry.dirListPtr = dp; } DirEntry dirEntry; public: using iterator_category = std::input_iterator_tag; @@ -118,10 +117,9 @@ public: pointer operator->() const { return &dirEntry; } Q_CORE_EXPORT const_iterator &operator++(); const_iterator operator++(int) { auto tmp = *this; operator++(); return tmp; }; - friend bool operator==(const const_iterator &lhs, sentinel) noexcept - { - return lhs.dirListPtr == nullptr; - } + private: + bool atEnd() const noexcept { return dirEntry.dirListPtr == nullptr; } + friend bool operator==(const const_iterator &lhs, sentinel) noexcept { return lhs.atEnd(); } #ifndef __cpp_impl_three_way_comparison friend bool operator!=(const const_iterator &lhs, sentinel) noexcept { return !operator==(lhs, sentinel{}); }