Сложные вещи. Ваш начальный код ICE VC10 Beta2, хорошо.
Прежде всего, я думаю, что у вас есть это задом наперед:
template<>
template< class X >
struct A< X >::B< int > {};
X - это шаблонный параметр для структуры A, а B - полностью специализированный, поэтому я думаю, что это должно быть так:
template< class X >
template<>
struct A< X >::B< int > {};
Но даже это не компилируется. Текст ошибки действительно полезен, хотя:
a.cpp a.cpp (11): ошибка C3212:
«A :: B»: явный
специализация члена шаблона
должен быть членом явного
специализация
a.cpp (8): см. объявление 'A :: B'
Похоже, что вполне законно полностью специализировать B, если вы также полностью специализируете A.
Редактировать : Хорошо, я слышал от кого-то, кто может авторитетно говорить об этом - перефразируя, это очень мутная область в стандарте, и это открытая проблема с Комитетом C ++, чтобы очистить его up («это» - явная специализация членов шаблонов классов). В ближайшей перспективе совет: «Не делай этого».