// // ranges.h // iterator // // Created by Sam Jaffe on 4/1/23. // Copyright © 2023 Sam Jaffe. All rights reserved. // #pragma once namespace ranges { template auto for_each(It it, S end, F consumer) { for (; it != end; ++it) { std::invoke(consumer, *it); } return std::make_pair(it, consumer); } template auto distance(It it, S end) { typename std::iterator_traits::difference_type diff{0}; for_each(it, end, [&diff](auto const &) { ++diff; }); return diff; } template