diff --git a/src/containers.hh b/src/containers.hh index 18098289..d5673a28 100644 --- a/src/containers.hh +++ b/src/containers.hh @@ -72,7 +72,7 @@ struct FilterView do_filter(); } - auto operator*() -> decltype(*std::declval()) { return *m_it; } + decltype(auto) operator*() { return *m_it; } Iterator& operator++() { ++m_it; do_filter(); return *this; } Iterator operator++(int) { auto copy = *this; ++(*this); return copy; } @@ -122,21 +122,18 @@ struct FilterFactory template inline ContainerView> filter(Filter f) { return {{std::move(f)}}; } -template -using TransformedResult = decltype(std::declval()(*std::declval())); - template struct TransformView { using ContainerIt = IteratorOf; + using ResType = decltype(std::declval()(*std::declval())); - struct Iterator : std::iterator>> + struct Iterator : std::iterator> { Iterator(const TransformView& view, ContainerIt it) : m_it{std::move(it)}, m_view{view} {} - auto operator*() -> TransformedResult { return m_view.m_transform(*m_it); } + decltype(auto) operator*() { return m_view.m_transform(*m_it); } Iterator& operator++() { ++m_it; return *this; } Iterator operator++(int) { auto copy = *this; ++m_it; return copy; } @@ -352,6 +349,7 @@ void unordered_erase(Container&& vec, U&& value) template Init accumulate(Container&& c, Init&& init, BinOp&& op) { + using std::begin; using std::end; return std::accumulate(begin(c), end(c), init, op); }