summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2019-06-10 21:54:53 +1000
committerMaxime Coste <mawww@kakoune.org>2019-06-10 21:57:06 +1000
commitd2dac558e7ead367b3c659484592bd7e8dc9df71 (patch)
treecd4053b387ed2fc45ce3c3a96531210299651e5b
parent09e1ec97a9d7925c9d4411f4f274919aeea1bf75 (diff)
Add a gather overload that infer element type
-rw-r--r--src/ranges.hh12
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)
{