#include <iostream>

namespace Test
{
    /// My class documentation
    class Abc
    {
    public:
        /// My enum class
        enum struct MyEnumClass : unsigned int
        {
            /// My first entry
            abc ///! My other entry
        };

        /// My method docuemtnation
        void foo();
    };

    /// My Fruit documentation
    enum class Fruit : unsigned int
    {
        begin   = 0,     ///< begin element
        apple   = begin, ///< 0
        orange,          ///< 1
        banana,          ///< 2
        end              ///< end and default element
    };

    //
    /// Operator for Fruit
    ///
    /// \param os ostream operator
    /// \param rhs the fruit object
    ///
    /// \return  ostream operator
    //
    ::std::ostream & operator << (::std::ostream & os, Fruit const & rhs)
    {
        switch(rhs)
        {
        case Fruit::apple:  return os << "apple";
        case Fruit::orange: return os << "orange";
        case Fruit::banana: return os << "banana";
        case Fruit::end: // fall through
        default:
            return os << "end";
        }
    }
}

