[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