https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100940
Patrick Palka <ppalka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 CC| |ppalka at gcc dot gnu.org Last reconfirmed| |2021-06-07 Status|UNCONFIRMED |NEW --- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> --- Good point, confirmed. Though I'm not sure if perfect forwarding here is strictly necessary to fix this testcase. Perhaps the _S_has_simple_extra_args versions of _Partial should be forwarding the bound arguments as prvalues instead of as const lvalues? The following --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -933,10 +933,10 @@ namespace views::__adaptor { } template<typename _Range> - requires __adaptor_invocable<_Adaptor, _Range, const _Arg&> + requires __adaptor_invocable<_Adaptor, _Range, _Arg> constexpr auto operator()(_Range&& __r) const - { return _Adaptor{}(std::forward<_Range>(__r), _M_arg); } + { return _Adaptor{}(std::forward<_Range>(__r), static_cast<_Arg>(_M_arg)); } static constexpr bool _S_has_simple_call_op = true; }; would fix your example.