#pragma once #include #include namespace tf { template constexpr std::enable_if_t>::value && std::is_integral>::value && std::is_integral>::value, bool> is_range_invalid(B beg, E end, S step) { return ((step == 0 && beg != end) || (beg < end && step <= 0) || // positive range (beg > end && step >= 0)); // negative range } template constexpr std::enable_if_t>::value && std::is_integral>::value && std::is_integral>::value, size_t> distance(B beg, E end, S step) { return (end - beg + step + (step > 0 ? -1 : 1)) / step; } } // end of namespace tf -----------------------------------------------------