| |
| 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>>; |
| }; |
| |