template class iterable { It m_first, m_last; public: iterable() = default; iterable(It first, It last) : m_first(first), m_last(last) {} It begin() const { return m_first; } It end() const { return m_last; } }; template static inline iterable make_iterable(It a, It b) { return iterable(a, b); }