#include <iostream>
using namespace std;
class Test
{
public:
enum class Fruit
{
apple,
banana,
orange,
pineapple,
lemon
};
friend Fruit operator++(Fruit& f)
{
switch (f)
{
case Fruit::apple: return f = Fruit::banana;
case Fruit::banana: return f = Fruit::orange;
case Fruit::orange: return f = Fruit::pineapple;
case Fruit::pineapple: return f = Fruit::lemon;
case Fruit::lemon: return f = Fruit::apple;
}
}
friend std::ostream& operator<<( std::ostream& os, const Fruit &fruit )
{
switch( fruit )
{
case Fruit::apple: os << "apple"; break;
case Fruit::banana: os << "banana"; break;
case Fruit::orange: os << "orange"; break;
}
return os;
}
};
int main() {
// your code goes here
Test::Fruit f = Test::Fruit::banana;
cout << ++f << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdAp7CnB1YmxpYzoKICAgIGVudW0gY2xhc3MgRnJ1aXQKICAgIHsKICAgICAgYXBwbGUsCiAgICAgIGJhbmFuYSwKICAgICAgb3JhbmdlLAogICAgICBwaW5lYXBwbGUsCiAgICAgIGxlbW9uCiAgICB9OwogICAgCiAgICBmcmllbmQgRnJ1aXQgb3BlcmF0b3IrKyhGcnVpdCYgZikKICAgIHsKICAgICAgc3dpdGNoIChmKQogICAgICB7CiAgICAgIGNhc2UgRnJ1aXQ6OmFwcGxlOiByZXR1cm4gZiA9IEZydWl0OjpiYW5hbmE7CiAgICAgIGNhc2UgRnJ1aXQ6OmJhbmFuYTogcmV0dXJuIGYgPSBGcnVpdDo6b3JhbmdlOwogICAgICBjYXNlIEZydWl0OjpvcmFuZ2U6IHJldHVybiBmID0gRnJ1aXQ6OnBpbmVhcHBsZTsKICAgICAgY2FzZSBGcnVpdDo6cGluZWFwcGxlOiByZXR1cm4gZiA9IEZydWl0OjpsZW1vbjsKICAgICAgY2FzZSBGcnVpdDo6bGVtb246IHJldHVybiBmID0gRnJ1aXQ6OmFwcGxlOwogICAgICB9CiAgICB9CiAgICAKICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoIHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEZydWl0ICZmcnVpdCApCiAgICB7CiAgICAgIHN3aXRjaCggZnJ1aXQgKQogICAgICB7CiAgICAgIGNhc2UgRnJ1aXQ6OmFwcGxlOiBvcyA8PCAiYXBwbGUiOyBicmVhazsKICAgICAgY2FzZSBGcnVpdDo6YmFuYW5hOiBvcyA8PCAiYmFuYW5hIjsgYnJlYWs7CiAgICAgIGNhc2UgRnJ1aXQ6Om9yYW5nZTogb3MgPDwgIm9yYW5nZSI7IGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBvczsKICAgIH0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJVGVzdDo6RnJ1aXQgZiA9IFRlc3Q6OkZydWl0OjpiYW5hbmE7CiAKCWNvdXQgPDwgKytmIDw8IGVuZGw7CiAKCXJldHVybiAwOwp9Cg==