| struct has_member_reserve |
| static std::true_type check(decltype(ref<U>().reserve(size_t{}))*); |
| static std::false_type check(...); |
| static constexpr bool value = |
| decltype(check<std::decay_t<T>>(nullptr))::value; |
| constexpr bool has_member_reserve_v = has_member_reserve<T>::value; |
| template <template <class, class...> class Container, class T, class... Args, |
| auto transform(const Container<T, Args...>& container, F&& functor) |
| using R = decltype(functor(*container.begin())); |
| if constexpr (detail::has_member_reserve_v<Container<T, Args...>>) |
| result.reserve(container.size()); |
| std::transform(container.begin(), container.end(), |
| std::inserter(result, result.end()), |
| std::forward<F>(functor)); |