cro said:
Maybe I can go with something like this until C++ 0x is release and implemented in gcc and VC compiler ?

class A
{
public:
    enum Value { None, Value1, Value2 };
};

class B
{
public:
    enum Value { None, SomeType1, SomeType2 };
};

int main()
{
    A::Value a = A::None;
    B::Value b = B::None;
}

That'd work. With some trickery you would be able to declare variables without using the ::Value bit too, like this:

class MyEnum
{
public:
    enum Value
    {
        None,
        Value1,
        Value2
    };

    MyEnum(Value value) : _value(value) { }

    operator Value() const
    {
        return _value;
    }
private:
    Value _value;
};


Then you could simply use it as:
MyEnum x = MyEnum::Value1;


You'd have to repeat that code for every enum though.