On Thu, 8 Oct 2026 at 14:36, Tomasz Kamiński <[email protected]> wrote:
>
> This implements LWG4125, "move_iterator's default constructor should
> be constrained". As for other operations on move_iterator, the constrain
> is only when concepts are available (__glibcxx_concepts).
>
> libstdc++-v3/ChangeLog:
>
> * include/bits/stl_iterator.h (move_iterator::move_iterator())
> [__glibcxx_concepts]: Constrain with default_initializable.
> * testsuite/24_iterators/move_iterator/default_init.cc: New test.
> ---
> Testing on x86_64-linux. *iterator* test already passed. OK for trunk
> when all test passes?
OK
(There are quite a few uses of move_iterator in the 25_algorithms tests as well)
>
> libstdc++-v3/include/bits/stl_iterator.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/libstdc++-v3/include/bits/stl_iterator.h
> b/libstdc++-v3/include/bits/stl_iterator.h
> index bcc22c50de5..c8418266e0c 100644
> --- a/libstdc++-v3/include/bits/stl_iterator.h
> +++ b/libstdc++-v3/include/bits/stl_iterator.h
> @@ -1508,8 +1508,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> __base_ref>;
> #endif
>
> + // _GLIBCXX_RESOLVE_LIB_DEFECTS
> + // 4125. move_iterator's default constructor should be constrained
> _GLIBCXX17_CONSTEXPR
> move_iterator()
> +#ifdef __glibcxx_concepts
> + requires default_initializable<_Iterator>
> +#endif
> : _M_current() { }
>
> explicit _GLIBCXX17_CONSTEXPR
> --
> 2.55.0
>