#pragma once #include "gp/algorithm/tmp_manip.hpp" namespace gp{ template concept IsSubstractible = requires(T a, T b) { {a - b} -> std::integral; }; template> class nameless_range; template class nameless_range { it _begin; it _end; friend nameless_range; public: using associated_iterator = it; nameless_range() = delete; template nameless_range(const nameless_range& oth) : _begin(oth._begin) , _end(oth._end) {} nameless_range(it sbegin, it send) : _begin(sbegin) , _end(send) {} it begin() const { return _begin; } it end() const { return _end; } }; template class nameless_range : public nameless_range { public: nameless_range() = delete; template nameless_range(const nameless_range& oth) : nameless_range(oth._begin,oth._end) {} nameless_range(it sbegin, it send) : nameless_range(sbegin, send) {} std::size_t size() const { return this->_end-this->_begin; } }; }