
    /// Test enum
    enum class Fruit
    {
        apple,
        banana,
        orange,
        pineapple,
        lemon
    };

    /// Non-scalable way
    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;
        }
    }
    
    
    #include <iostream>
    std::ostream& operator<<(std::ostream& os, Fruit f)
    {
        switch(f)
        {
            case Fruit::apple: os << "Fruit::apple"; return os;
            case Fruit::banana: os << "Fruit::banana"; return os;
            case Fruit::orange: os << "Fruit::orange"; return os;
            case Fruit::pineapple: os << "Fruit::pineapple"; return os;
            case Fruit::lemon: os << "Fruit::lemon"; return os;
        }
    }
    int main()
    {
        Fruit f = Fruit::banana;
        std::cout << "f = " << f << ";\n";
        std::cout << "++f = " << ++f << ";\n";
    }