diff options
| author | Maxime Coste <mawww@kakoune.org> | 2019-06-10 21:54:53 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2019-06-10 21:57:06 +1000 |
| commit | d2dac558e7ead367b3c659484592bd7e8dc9df71 (patch) | |
| tree | cd4053b387ed2fc45ce3c3a96531210299651e5b | |
| parent | 09e1ec97a9d7925c9d4411f4f274919aeea1bf75 (diff) | |
Add a gather overload that infer element type
| -rw-r--r-- | src/ranges.hh | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/ranges.hh b/src/ranges.hh index 88f6d2ef..014dbd8b 100644 --- a/src/ranges.hh +++ b/src/ranges.hh @@ -53,7 +53,7 @@ template<typename Range> using IteratorOf = decltype(std::begin(std::declval<Range>())); template<typename Range> -using ValueOf = typename Range::value_type; +using ValueOf = decltype(*std::declval<IteratorOf<Range>>()); template<typename Range> struct SkipView @@ -450,6 +450,16 @@ auto gather() }); } +template<template <typename Element> class Container> +auto gather() +{ + return make_view_factory([](auto&& range) { + using std::begin; using std::end; + using ValueType = std::remove_cv_t<std::remove_reference_t<decltype(*begin(range))>>; + return Container<ValueType>(begin(range), end(range)); + }); +} + template<typename ExceptionType, size_t... Indexes> auto elements(bool exact_size = false) { |
