// ---------
// Enums.c++
// ---------

#include <cassert>  // assert
#include <iostream> // cout, endl

namespace My {
    enum Color {
        red,
        green,
        blue,
        yellow = blue,
        purple};}

int main () {
    using namespace std;
    cout << "Enums.c++" << endl;

    assert(My::blue   == 2);
    assert(My::yellow == 2);
    assert(My::purple == 3);
    
    assert(My::red   == My::red);
    assert(My::green != My::blue);
    assert(My::red   <  My::blue);

    My::Color x = My::red;
    My::Color y = My::green;
    My::Color z = My::blue;
    assert(x == x);
    assert(y != z);
    assert(y <  z);
    assert(y <= z);
    assert(z >  y);
    assert(z >= y);

    int i = My::blue;
    assert(i == 2);

//  My::Color t = 2;                            // error: invalid conversion from 'int' to 'My::Color'
    My::Color t = static_cast<My::Color>(2);
    assert(t == 2);

    switch (x) {
        case My::red:
        break;

        case My::green:
        break;

        default:
        break;}

    cout << "Done." << endl;
    return 0;}


syntax highlighted by Code2HTML, v. 0.9.1