[PATCH] libstdc++: Rename views::to_input to views::as_input.

Tomasz Kaminski tkaminsk@redhat.com
Thu Apr 9 16:01:04 GMT 2026


On Thu, Apr 9, 2026 at 3:58 PM Tomasz Kamiński <tkaminsk@redhat.com> wrote:

> This patch implements P3828R1: Rename the to_input view to as_input.
>
> The paper suggest renaming the feature test macro without changing the
> value and this patch follows.
>
> libstdc++-v3/ChangeLog:
>
>         * include/bits/version.def (ranges_to_input): Rename to...
>         (ranges_as_input): Rename from ranges_as_input.
>         * include/bits/version.h: Regenerate.
>         * include/std/ranges (ranges::to_input_view, views::to_input)
>         (__detail::__can_to_input, views::_ToInput): Rename to...
>         (ranges::as_input_view, views::as_input, __detail::__can_as_input)
>         (views::_AsInput): Rename from above...
>         * src/c++23/std.cc.in: Rename views::to_input and to_input_view
>         export.
>         * testsuite/25_algorithms/contains/1.cc: Replace views::to_input
>         with views::as_input.
>         * testsuite/std/ranges/adaptors/to_input/1.cc: Move to...
>         * testsuite/std/ranges/adaptors/as_input/1.cc: ...here, and replace
>         views::to_input with views::as_input.
>
> gcc/testsuite/ChangeLog:
>
>         * g++.dg/reflect/range_args.C: Replace views::to_input with
>         views::as_input.
> ---
> The feature test macro situation is fine as is, as user can still
> differentiate which name they got.
>
> Tested on x86_64-linux locally. Running full test now.
> OK for trunk when all test passes?
>
All test passed.

>
>  gcc/testsuite/g++.dg/reflect/range_args.C     |  6 ++--
>  libstdc++-v3/include/bits/version.def         |  2 +-
>  libstdc++-v3/include/bits/version.h           | 12 ++++----
>  libstdc++-v3/include/std/ranges               | 28 +++++++++----------
>  libstdc++-v3/src/c++23/std.cc.in              |  6 ++--
>  .../testsuite/25_algorithms/contains/1.cc     | 18 ++++++------
>  .../adaptors/{to_input => as_input}/1.cc      | 12 ++++----
>  7 files changed, 42 insertions(+), 42 deletions(-)
>  rename libstdc++-v3/testsuite/std/ranges/adaptors/{to_input =>
> as_input}/1.cc (78%)
>
> diff --git a/gcc/testsuite/g++.dg/reflect/range_args.C
> b/gcc/testsuite/g++.dg/reflect/range_args.C
> index fa06cf0ebc7..df9b5e42359 100644
> --- a/gcc/testsuite/g++.dg/reflect/range_args.C
> +++ b/gcc/testsuite/g++.dg/reflect/range_args.C
> @@ -45,7 +45,7 @@ test_type_range(Rg&& rg)
>  constexpr info vt[] = {^^int, ^^int, ^^float, ^^int, ^^float, ^^double};
>  static_assert (test_type_range (vt | std::views::filter
> (is_integral_type))); // bidirectional
>  static_assert (test_type_range (vt | std::views::take_while
> (is_integral_type))); // non-common
> -static_assert (test_type_range (vt | std::views::to_input)); // input
> +static_assert (test_type_range (vt | std::views::as_input)); // input
>  static_assert (test_type_range (vt | std::views::cache_latest)); //
> input, move-only
>
>  template<typename Rg>
> @@ -74,7 +74,7 @@ constexpr bool not_digit(char c) {
>
>  static_assert (test_value_range (vv | std::views::filter (not_digit)));
> // bidirectional
>  static_assert (test_value_range (vv | std::views::take_while
> (not_digit))); // non-common
> -static_assert (test_value_range (vv | std::views::to_input)); // input
> +static_assert (test_value_range (vv | std::views::as_input)); // input
>  static_assert (test_value_range (vv | std::views::cache_latest)); //
> input, move-only
>
>  template<int> struct Aggr;
> @@ -91,6 +91,6 @@ consteval bool of_int_type(info dm) {
>  consteval {
>    define_aggregate (^^Aggr<0>, dmt | std::views::filter (of_int_type));
> // bidirectional
>    define_aggregate (^^Aggr<1>, dmt | std::views::take_while
> (of_int_type)); // non-common
> -  define_aggregate (^^Aggr<2>, dmt | std::views::to_input); // input
> +  define_aggregate (^^Aggr<2>, dmt | std::views::as_input); // input
>    define_aggregate (^^Aggr<3>, dmt | std::views::cache_latest); // input,
> move-only
>  }
> diff --git a/libstdc++-v3/include/bits/version.def
> b/libstdc++-v3/include/bits/version.def
> index cfb90533ce4..51e60afe381 100644
> --- a/libstdc++-v3/include/bits/version.def
> +++ b/libstdc++-v3/include/bits/version.def
> @@ -2196,7 +2196,7 @@ ftms = {
>  };
>
>  ftms = {
> -  name = ranges_to_input;
> +  name = ranges_as_input;
>    values = {
>      v = 202502;
>      cxxmin = 26;
> diff --git a/libstdc++-v3/include/bits/version.h
> b/libstdc++-v3/include/bits/version.h
> index 22dd31b9d32..10348524e4e 100644
> --- a/libstdc++-v3/include/bits/version.h
> +++ b/libstdc++-v3/include/bits/version.h
> @@ -2456,15 +2456,15 @@
>  #endif /* !defined(__cpp_lib_ranges_filter) */
>  #undef __glibcxx_want_ranges_filter
>
> -#if !defined(__cpp_lib_ranges_to_input)
> +#if !defined(__cpp_lib_ranges_as_input)
>  # if (__cplusplus >  202302L)
> -#  define __glibcxx_ranges_to_input 202502L
> -#  if defined(__glibcxx_want_all) ||
> defined(__glibcxx_want_ranges_to_input)
> -#   define __cpp_lib_ranges_to_input 202502L
> +#  define __glibcxx_ranges_as_input 202502L
> +#  if defined(__glibcxx_want_all) ||
> defined(__glibcxx_want_ranges_as_input)
> +#   define __cpp_lib_ranges_as_input 202502L
>  #  endif
>  # endif
> -#endif /* !defined(__cpp_lib_ranges_to_input) */
> -#undef __glibcxx_want_ranges_to_input
> +#endif /* !defined(__cpp_lib_ranges_as_input) */
> +#undef __glibcxx_want_ranges_as_input
>
>  #if !defined(__cpp_lib_to_string)
>  # if (__cplusplus >  202302L) && _GLIBCXX_HOSTED && (__glibcxx_to_chars)
> diff --git a/libstdc++-v3/include/std/ranges
> b/libstdc++-v3/include/std/ranges
> index 0aa4191e04f..ca91e081ad4 100644
> --- a/libstdc++-v3/include/std/ranges
> +++ b/libstdc++-v3/include/std/ranges
> @@ -72,7 +72,7 @@
>  #define __glibcxx_want_ranges_slide
>  #define __glibcxx_want_ranges_stride
>  #define __glibcxx_want_ranges_to_container
> -#define __glibcxx_want_ranges_to_input
> +#define __glibcxx_want_ranges_as_input
>  #define __glibcxx_want_ranges_zip
>  #include <bits/version.h>
>
> @@ -10537,12 +10537,12 @@ namespace ranges
>  } // namespace ranges
>  #endif // __cpp_lib_ranges_cache_latest
>
> -#if __cpp_lib_ranges_to_input // C++ >= 26
> +#if __cpp_lib_ranges_as_input // C++ >= 26
>  namespace ranges
>  {
>    template<input_range _Vp>
>      requires view<_Vp>
> -  class to_input_view : public view_interface<to_input_view<_Vp>>
> +  class as_input_view : public view_interface<as_input_view<_Vp>>
>    {
>      _Vp _M_base = _Vp();
>
> @@ -10550,10 +10550,10 @@ namespace ranges
>      class _Iterator;
>
>    public:
> -    to_input_view() requires default_initializable<_Vp> = default;
> +    as_input_view() requires default_initializable<_Vp> = default;
>
>      constexpr explicit
> -    to_input_view(_Vp __base)
> +    as_input_view(_Vp __base)
>      : _M_base(std::move(__base))
>      { }
>
> @@ -10591,12 +10591,12 @@ namespace ranges
>    };
>
>    template<typename _Range>
> -    to_input_view(_Range&&) -> to_input_view<views::all_t<_Range>>;
> +    as_input_view(_Range&&) -> as_input_view<views::all_t<_Range>>;
>
>    template<input_range _Vp>
>      requires view<_Vp>
>    template<bool _Const>
> -  class to_input_view<_Vp>::_Iterator
> +  class as_input_view<_Vp>::_Iterator
>    {
>      using _Base = __maybe_const_t<_Const, _Vp>;
>
> @@ -10607,7 +10607,7 @@ namespace ranges
>      : _M_current(std::move(__current))
>      { }
>
> -    friend to_input_view;
> +    friend as_input_view;
>      friend _Iterator<!_Const>;
>
>    public:
> @@ -10680,13 +10680,13 @@ namespace ranges
>      namespace __detail
>      {
>        template<typename _Tp>
> -       concept __can_to_input = requires {
> to_input_view(std::declval<_Tp>()); };
> +       concept __can_as_input = requires {
> as_input_view(std::declval<_Tp>()); };
>      }
>
> -    struct _ToInput : __adaptor::_RangeAdaptorClosure<_ToInput>
> +    struct _AsInput : __adaptor::_RangeAdaptorClosure<_AsInput>
>      {
>        template<viewable_range _Range>
> -       requires __detail::__can_to_input<_Range>
> +       requires __detail::__can_as_input<_Range>
>         constexpr auto
>         operator() [[nodiscard]] (_Range&& __r) const
>         {
> @@ -10695,16 +10695,16 @@ namespace ranges
>                         && !forward_range<_Range>)
>             return views::all(std::forward<_Range>(__r));
>           else
> -           return to_input_view(std::forward<_Range>(__r));
> +           return as_input_view(std::forward<_Range>(__r));
>         }
>
>        static constexpr bool _S_has_simple_call_op = true;
>      };
>
> -    inline constexpr _ToInput to_input;
> +    inline constexpr _AsInput as_input;
>    }
>  } // namespace ranges
> -#endif // __cpp_lib_ranges_to_input
> +#endif // __cpp_lib_ranges_as_input
>
>  _GLIBCXX_END_NAMESPACE_VERSION
>  } // namespace std
> diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/
> std.cc.in
> index 3ac19871692..ad249cb3348 100644
> --- a/libstdc++-v3/src/c++23/std.cc.in
> +++ b/libstdc++-v3/src/c++23/std.cc.in
> @@ -2800,9 +2800,9 @@ export namespace std
>      using ranges::cache_latest_view;
>      namespace views { using views::cache_latest; }
>  #endif
> -#if __glibcxx_ranges_to_input // C++ >= 26
> -    using ranges::to_input_view;
> -    namespace views { using views::to_input; }
> +#if __glibcxx_ranges_as_input // C++ >= 26
> +    using ranges::as_input_view;
> +    namespace views { using views::as_input; }
>  #endif
>  #ifdef __cpp_lib_ranges_indices // C++ >= 26
>      namespace views { using views::indices; }
> diff --git a/libstdc++-v3/testsuite/25_algorithms/contains/1.cc
> b/libstdc++-v3/testsuite/25_algorithms/contains/1.cc
> index b44c06032e8..aaf81f85a0a 100644
> --- a/libstdc++-v3/testsuite/25_algorithms/contains/1.cc
> +++ b/libstdc++-v3/testsuite/25_algorithms/contains/1.cc
> @@ -14,17 +14,17 @@ void
>  test01()
>  {
>    int x[] = {1,2,3};
> -  using to_input = __gnu_test::test_input_range<int>;
> -  VERIFY( ranges::contains(to_input(x), 1) );
> -  VERIFY( ranges::contains(to_input(x), 2) );
> -  VERIFY( ranges::contains(to_input(x), 3) );
> -  VERIFY( !ranges::contains(to_input(x), 4) );
> +  using as_input = __gnu_test::test_input_range<int>;
> +  VERIFY( ranges::contains(as_input(x), 1) );
> +  VERIFY( ranges::contains(as_input(x), 2) );
> +  VERIFY( ranges::contains(as_input(x), 3) );
> +  VERIFY( !ranges::contains(as_input(x), 4) );
>    VERIFY( !ranges::contains(x, x+2, 3) );
>    auto neg = [](int n) { return -n; };
> -  VERIFY( ranges::contains(to_input(x), -1, neg) );
> -  VERIFY( ranges::contains(to_input(x), -2, neg) );
> -  VERIFY( ranges::contains(to_input(x), -3, neg) );
> -  VERIFY( !ranges::contains(to_input(x), -4, neg) );
> +  VERIFY( ranges::contains(as_input(x), -1, neg) );
> +  VERIFY( ranges::contains(as_input(x), -2, neg) );
> +  VERIFY( ranges::contains(as_input(x), -3, neg) );
> +  VERIFY( !ranges::contains(as_input(x), -4, neg) );
>
>    VERIFY( !ranges::contains(x, x+2, -3, neg) );
>  }
> diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc
> b/libstdc++-v3/testsuite/std/ranges/adaptors/as_input/1.cc
> similarity index 78%
> rename from libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc
> rename to libstdc++-v3/testsuite/std/ranges/adaptors/as_input/1.cc
> index cde368a2f64..8bd1a82a7b7 100644
> --- a/libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc
> +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/as_input/1.cc
> @@ -2,8 +2,8 @@
>
>  #include <ranges>
>
> -#if __cpp_lib_ranges_to_input != 202502L
> -# error "Feature-test macro __cpp_lib_ranges_to_input has wrong value in
> <ranges>"
> +#if __cpp_lib_ranges_as_input != 202502L
> +# error "Feature-test macro __cpp_lib_ranges_as_input has wrong value in
> <ranges>"
>  #endif
>
>  #include <algorithm>
> @@ -18,7 +18,7 @@ void
>  test01()
>  {
>    std::vector<int> r{1,2,3};
> -  auto v = r | views::to_input;
> +  auto v = r | views::as_input;
>    using type = decltype(v);
>    static_assert( ranges::input_range<type> &&
> !ranges::forward_range<type> );
>
> @@ -45,10 +45,10 @@ test02()
>    int x[] = {1,2,3};
>    __gnu_test::test_input_range<int> rx(x);
>    static_assert( !ranges::common_range<decltype(rx)> );
> -  auto v = rx | views::to_input;
> +  auto v = rx | views::as_input;
>    static_assert( std::same_as<decltype(v), decltype(views::all(rx))> );
> -  static_assert( std::same_as<decltype(x | views::to_input),
> -                             decltype(x | views::to_input |
> views::to_input)> );
> +  static_assert( std::same_as<decltype(x | views::as_input),
> +                             decltype(x | views::as_input |
> views::as_input)> );
>  }
>
>  int
> --
> 2.53.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260409/5527a447/attachment-0001.htm>


More information about the Libstdc++ mailing list