template<typename _Functor, typename _ArgTypes> struct invoke_result; template<typename _Fn, typename _ArgTypes> struct is_invocable; template<typename _Fn, typename... _Args> concept invocable = is_invocable<_Fn, _Args...>::value; template<typename _Fn, typename _Is> requires invocable<_Fn, _Is> using indirect_result_t = typename invoke_result<_Fn, _Is>::type; template<typename _Tp> struct remove_cv; template<typename _Iter, typename _Proj> struct projected { using value_type = remove_cv<indirect_result_t<_Proj&, _Iter>>; };