31 typename TIter = decltype(std::begin(std::declval<T>())),
32 typename = decltype(std::end(std::declval<T>()))>
33 constexpr
auto enumerate(T && iterable)
39 bool operator != (
const iterator& other)
const {
return iter != other.iter; }
40 void operator ++ () { ++i; ++iter; }
41 auto operator * ()
const {
return std::tie(i, *iter); }
44 struct iterable_wrapper
47 auto begin() {
return iterator{ 0, std::begin(iterable) }; }
48 auto end() {
return iterator{ 0, std::end(iterable) }; }
50 return iterable_wrapper{ std::forward<T>(iterable) };