maybe<typename std::size_t> minimum_idx_maybe(const Container& xs) { if (is_empty(xs)) return {}; else return minimum_idx(xs); }
typename std::size_t minimum_idx_on(F f, const Container& xs) { typedef typename std::result_of<F(typename Container::value_type)>::type Result; auto transformed = transform_convert<std::vector<Result>>(f, xs); return minimum_idx(transformed); }
std::size_t minimum_idx_on(F f, const Container& xs) { using Result = internal::invoke_result_t<F, typename Container::value_type>; auto transformed = transform_convert<std::vector<std::decay_t<Result>>>(f, xs); return minimum_idx(transformed); }