Note that you can get your original version to work if you provide the enumeration name in the function declaration (SOME_PARENT::MyEnum instead of SOME_PARENT::SOME_ENUM) and you provide the template parameter SOME_PARENT explicitly:

Code:
class MyParent {
public:
enum MyEnum {
MY_ENUM_A,
MY_ENUM_B,
};
void foo(MyEnum my_enum) {
//...
}
static const MyParent& GetInstance(void) {
static const MyParent INSTANCE_;
return INSTANCE_;
}
};

template <class SOME_PARENT>
void SomeFunc(const typename SOME_PARENT::MyEnum& some_enum)
{
SOME_PARENT::GetInstance().foo(some_enum);
}

...
// Call site
SomeFunc<MyParent>(MyParent::MY_ENUM_A);