Единственный способ поместить имена enum
имен значений непосредственно в класс - это наследовать от класса с этими именами.
Код, который вы показываете, похоже, использует расширение языка Microsoft.
В C ++ 98 имя типа enum
нельзя использовать для обозначения одного из имен значений:
Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing. All rights reserved.
MODE:strict errors C++ C++0x_extensions
"ComeauTest.c", line 17: error: name followed by "::" must be a class or namespace
name... Wild guess: Did you #include the right header?
std::cout << B<A>::E::X << std::endl;
^
1 error detected in the compilation of "ComeauTest.c".
Так что вместо ...
typedef typename T::E E;
... do ...
typedef T E;
Приветствия и hth.,