I\'m looking for a hacky kind of solution to the following problem: GCC 4.4+ accepts the following c++0x code:
enum class my_enum
{
value1,
value2
};
I just discovered a problem with James' good hack (which I have heretofore been using), and a fix to the problem. I discovered the problem when I tried to define a stream operator for my_enum.
#include
struct my_enum {
enum type {
value1,
value2
};
my_enum(type v) : value_(v) { }
operator type() const { return value_; }
private:
type value_;
};
std::ostream&
operator<<(std::ostream& os, my_enum v)
{
return os << "streaming my_enum";
}
int main()
{
std::cout << my_enum::value1 << '\n';
}
The output is:
0
The problem is my_enum::value1 has different type than my_enum. Here's a hack to James' hack that I came up with.
struct my_enum
{
static const my_enum value1;
static const my_enum value2;
explicit my_enum(int v) : value_(v) { }
// explicit // if you have it!
operator int() const { return value_; }
private:
int value_;
};
my_enum const my_enum::value1(0);
my_enum const my_enum::value2(1);
Notes:
int.