10 template <typename T, typename TIter = decltype(std::begin(std::declval<T>())),
11 typename = decltype(std::end(std::declval<T>()))>
18 bool operator != (
const iterator & other)
const {
return iter != other.iter; }
19 void operator ++ () { ++i; ++iter; }
20 auto operator * ()
const {
return std::tie(i, *iter); }
22 struct iterable_wrapper
25 auto begin() {
return iterator{ 0, std::begin(iterable) }; }
26 auto end() {
return iterator{ 0, std::end(iterable) }; }
28 return iterable_wrapper{ std::forward<T>(iterable) };