Предотвратить неявную реализацию в шаблоне класса

Я пытаюсь объявить класс B, такой как написано ниже. Проблема, насколько я знаю, A<B, T1> на самом деле неявно рассматривается как A<B<T1>, T1> который не соответствует определению класса А. Поэтому мой вопрос таков: возможно ли использовать класс B внутри его собственного определения в его «неинстанцированной» форме? И если так, как?

template <template <class T1> class T2, class T1>
class A {

};

template <class T1>
class B {
A<B, T1>* example;
};

что приводит к следующей ошибке компиляции с gcc4.2:

ошибка: несоответствие типа / значения в аргументе 1 в списке параметров шаблона для шаблона < шаблон < класс T1> класс T2, класс T1> класс A ‘

ошибка: ожидал шаблон класса, получил ‘B< T1> ‘

0

Решение

Это похоже на ошибку в g ++ — 4.2, так как я могу воспроизвести вашу проблему с этим компилятором.

Если вы можете перейти как минимум на 4.4, ваш код будет скомпилирован как есть. Вы также можете написать A< ::B, T1>* example; заставить его использовать шаблон глобальной области видимости, который компилируется в 4.2.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]