Я не могу заставить это скомпилировать вообще.Я не могу быть возможно, но я не знаю, почему это не должно быть.
class A {
template <typename T>
class B {
int test() { return 0; }
};
//template <> class B<int>; <-with this, namepace error
B<int> myB_;
};
template <> class A::B<int> {
int test() {
return 1;
}
};
Как представляется, компилятор жалуется, что "явная специализация" class A :: B "должна быть объявлена перед использованием«.Если я пытаюсь предоставить объявление froward в закомментированной строке, компилятор жалуется: «Явная специализация« B »должна быть объявлена в пространстве имен, содержащем шаблон».Мы используем 2 разных компилятора здесь.Эта ошибка взята из компилятора IBM "xl" в AIX, но при компиляции в наших системах Sun я получаю похожие ошибки с разной степенью детализации.Похоже на уловку-22.
Очевидно, это очень надуманный, упрощенный пример, но он представляет проблему.Я хочу определить класс шаблона внутри класса, потому что класс шаблона релевантен только содержащему классу.Не должно быть доступа к шаблону извне класса.
Я что-то упустил?