https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94973
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- If it used std::invoke it would compile: static_assert( std::is_same_v<std::invoke_result_t<F&, X&>, int> ); // OK static_assert( std::is_same_v<ranges::invoke_result_t<F&, X&>, int> ); // ERROR