#ifndef INCLUDED_UTILS_REVERSE_ITERATE_H #define INCLUDED_UTILS_REVERSE_ITERATE_H template class ReverseIterate{ using I = decltype(((C*)(nullptr))->rbegin()); // das muss schoener gehen using D = decltype(**(I*)(nullptr)); class iterator{ I it; constexpr iterator(const I &it): it(it){}; bool operator !=(const iterator &that){ return that.it != it; } iterator operator++(){ ++it; return *this; } D operator*(){ return *it; } }; const iterator rbegin_attr; const iterator rend_attr; public: constexpr ReverseIterate(C& collection): rbegin_attr ( iterator(collection.rbegin())), rend_attr ( iterator(collection.rend())) {} iterator begin(){ return rbegin_attr; } iterator end(){ return rend_attr; } }; template constexpr ReverseIterate reversed(C& c){ return ReverseIterate(c); } /*template constexpr ReverseIterate reversed(C c){ return ReverseIterate(c); }*/ #endif