Assuming you don't use C++11 to do it, here's the solution - make classes friends to each other, so that Enum class can instantiate subclasses, and subclasses can call base class constructor, I also added missing parts to make the code compilable:
class MyEnum
{
public:
class Value1;
class Value2;
friend class Value1;
friend class Value2;
static Value1 VALUE1;
static Value2 VALUE2;
private:
MyEnum(std::string name) {}
};
class MyEnum::Value1 : public MyEnum
{
friend class MyEnum;
private:
Value1() : MyEnum("VALUE1") {}
};
class MyEnum::Value2 : public MyEnum
{
friend class MyEnum;
private:
Value2() : MyEnum("VALUE2") {}
};
MyEnum::Value1 MyEnum::VALUE1;
MyEnum::Value2 MyEnum::VALUE2;
int main()
{
// Use statuc enum value
MyEnum::Value1 &someValue = MyEnum::VALUE1;
return 0;
}