https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120318
--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> --- Probably not very useful but here's a mechanically reduced testcase (fixed by r16-504): $ cat std.ii module; 16:56 [38/1494] namespace std { template <typename> auto declval() -> decltype(0); template <typename> void forward() {} template <typename, typename> concept convertible_to = requires { declval; }; template <typename _Tp> concept move_constructible = convertible_to<_Tp, _Tp>; namespace ranges { inline namespace _Cpo {} } // namespace ranges namespace __detail { template <typename _Iter> using __iter_concept = _Iter; } template <typename _Iter> concept input_iterator = requires { typename __detail::__iter_concept<_Iter>; }; namespace ranges { namespace _Cpo { int end; } template <typename> concept range = requires { end; }; template <typename _Tp> concept input_range = input_iterator<_Tp>; template <typename _Tp> concept viewable_range = range<_Tp>; } // namespace ranges struct vector {}; namespace ranges { template <typename _Adaptor, typename> concept __adaptor_invocable = requires { declval<_Adaptor>; }; template <typename...> struct _Partial; template <typename _Tp> concept __is_range_adaptor_closure = requires(_Tp __t) { __t; }; template <typename _Self, typename _Range> requires __is_range_adaptor_closure<_Self> && __adaptor_invocable<_Self, _Range> constexpr auto operator|(_Range &&, _Self &&) {} template <typename> struct _RangeAdaptorClosure { template <typename _Self, typename _Range> requires __is_range_adaptor_closure<_Self> && __adaptor_invocable<_Self, _Range> friend constexpr auto operator|(_Range &&, _Self &&); }; struct _RangeAdaptor { template <typename... _Args> auto operator()(_Args...) { return _Partial<int, _Args...>{0, forward<_Args>...}; } }; template <typename _Adaptor, typename _Arg> struct _Partial<_Adaptor, _Arg> : _RangeAdaptorClosure<_Arg> { template <typename _Tp> _Partial(int, _Tp) {} }; namespace views { _RangeAdaptorClosure<int> all; template <viewable_range> using all_t = decltype(all); } // namespace views template <input_range, move_constructible> class transform_view; template <typename _Range, typename _Fp> transform_view() -> transform_view<views::all_t<_Range>, _Fp>; namespace views { namespace __detail { template <typename, typename> concept __can_transform_view = requires { transform_view(declval); }; } // namespace __detail struct _Transform : _RangeAdaptor { template <viewable_range _Range, typename _Fp> requires __detail::__can_transform_view<_Range, _Fp> auto operator0(); } inline transform; } // namespace views } // namespace ranges } // namespace std export module std; export namespace std { namespace ranges { namespace views { using views::transform; } } // namespace ranges using std::vector; } // namespace std $ cat 120318.C import std; using std::vector; using std::ranges::views::transform; int main(int argl,char**argv) { vector v; v | transform([](int x){return x * x % 24;}); return 0; }