diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 24416b659c1..55d3c520ba4 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -900,10 +900,12 @@ namespace views struct _Iota { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4096. views::iota(views::iota(0)) should be rejected template<__detail::__can_iota_view _Tp> - constexpr auto + constexpr iota_view> operator() [[nodiscard]] (_Tp&& __e) const - { return iota_view(std::forward<_Tp>(__e)); } + { return iota_view>(std::forward<_Tp>(__e)); } template requires __detail::__can_iota_view<_Tp, _Up> diff --git a/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc b/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc index f3fddbd3531..7b748cf9c3a 100644 --- a/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc +++ b/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc @@ -22,6 +22,17 @@ #include #include +template +concept can_iota = requires (Inc&& __inc) +{ std::views::iota(__inc); }; + +static_assert( can_iota ); +static_assert( can_iota ); +static_assert( !can_iota> ); +static_assert( !can_iota> ); +static_assert( !can_iota&> ); +static_assert( !can_iota&> ); + void test01() {