#include <iterator>
#include <utility>
#include <vector>
template <typename T>
class Reversed {
public:
explicit Reversed(T& t) : t_(t) {}
using Iterator = decltype(std::rbegin(std::declval<T&>()));
Iterator begin() const { return std::rbegin(t_); }
Iterator end() const { return std::rend(t_); }
private:
T& t_;
};
void ReversedIteratorValid(std::vector<int>& v){
auto it = Reversed(v).begin();
if (it == Reversed(v).end()) {
return;
}
*it = 10;
}
void ReversedIteratorInvalid(std::vector<int>& v){
auto it = Reversed(v).begin();
*it = 10;
}
void ReversedIteratorForLoopValid(std::vector<int>& v){
for(auto& i : Reversed(v)) {
i = 0;
}
}
void ReversedIteratorForLoopInvalid(std::vector<int>& v){
for(auto& i : Reversed(v)) {
if (i == 0) {
v.clear();
}
}
}