diff --git a/stl/inc/iterator b/stl/inc/iterator index c2927f0d728..19d67597d39 100644 --- a/stl/inc/iterator +++ b/stl/inc/iterator @@ -770,11 +770,11 @@ public: _NODISCARD constexpr counted_iterator<_Unwrapped_t> _Unwrapped() const& requires _Unwrappable_v { - return static_cast>>(_Current._Unwrapped()); + return counted_iterator<_Unwrapped_t>{_Current._Unwrapped(), _Length}; } - _NODISCARD constexpr counted_iterator<_Unwrapped_t<_Iter>> _Unwrapped() && requires _Unwrappable_v { - return static_cast>>(_STD move(_Current)._Unwrapped()); + _NODISCARD constexpr counted_iterator<_Unwrapped_t<_Iter>> _Unwrapped() && requires _Unwrappable_v<_Iter> { + return counted_iterator<_Unwrapped_t<_Iter>>{_STD move(_Current)._Unwrapped(), _Length}; } static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<_Iter>; diff --git a/tests/std/tests/P0896R4_counted_iterator/test.cpp b/tests/std/tests/P0896R4_counted_iterator/test.cpp index ba19e6410ec..0cec96ad8db 100644 --- a/tests/std/tests/P0896R4_counted_iterator/test.cpp +++ b/tests/std/tests/P0896R4_counted_iterator/test.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -304,4 +305,13 @@ struct instantiator { int main() { STATIC_ASSERT((with_writable_iterators::call(), true)); with_writable_iterators::call(); + + { // Validate unwrapping + list lst{0, 1, 2}; + counted_iterator ci{lst.begin(), 2}; + same_as::iterator>>> auto uci = _Get_unwrapped(ci); + ++uci; + _Seek_wrapped(ci, uci); + assert((ci == counted_iterator{ranges::next(lst.begin()), 1})); + } }