17 concept has_reserve_func = requires(T t) {
18 { t.reserve(
size_t()) };
22 concept has_size_func = requires(T t) {
23 { t.size() } -> std::convertible_to<size_t>;
29 template<
class...>
class result_container_t,
30 class input_container_t,
31 class transform_callable_t,
32 class... result_container_rest_t>
33 auto transform_return(input_container_t&& input,
const transform_callable_t& transformCallable)
35 using result_type = decltype(transformCallable(*input.begin()));
36 using result_container_full_t = result_container_t<result_type, result_container_rest_t...>;
37 result_container_full_t result;
39 if constexpr (details::has_reserve_func<result_container_full_t> && details::has_size_func<input_container_t>)
40 result.reserve(input.size());
42 for (
auto&& inputElement : input)
43 result.insert(result.end(), transformCallable(std::forward<decltype(inputElement)>(inputElement)));