#pragma once #include #include #include template struct TLowerCaseIterator: public std::iterator { using TNonConst = std::remove_const_t; inline TLowerCaseIterator(T* c) : C(c) { } inline TLowerCaseIterator& operator++() noexcept { ++C; return *this; } inline TLowerCaseIterator operator++(int) noexcept { return C++; } inline TNonConst operator*() const noexcept { return AsciiToLower(*C); } T* C; }; template inline bool operator==(const TLowerCaseIterator& l, const TLowerCaseIterator& r) noexcept { return l.C == r.C; } template inline bool operator!=(const TLowerCaseIterator& l, const TLowerCaseIterator& r) noexcept { return !(l == r); }