Ответ на ваш вопрос зависит от того, как выглядит Ссылка <>. Если в нем есть переменная экземпляра типа Bunny, то, конечно, она не будет работать (как бы это было, у вас есть рекурсивное определение, которое никогда не заканчивается). Если он содержит только ссылки и указатели, он должен работать нормально. Тип Bunny в экземпляре шаблона не будет мешать этому.
Редактировать (разместить ссылку <> редактирование кода):
Я не могу воссоздать твою проблему. Я переопределил код, как то, что вы делаете, но он прекрасно скомпилирован для меня:
struct base {
void fun() {}
};
template < typename T >
struct temp
{
T * t;
void f() { ((base*)t)->fun(); }
};
struct test
{
temp<test> t;
};
int main()
{
test t;
t.t.f();
}
Это явно неверный код, потому что вы получите неопределенные результаты, но он компилируется. Главной проблемой здесь является переинтерпретация приведения типа test * к типу base *. Если тест действительно наследовал от базы, то приведение даже не понадобилось бы. Код, подобный этому, не будет функционировать должным образом, но он должен хорошо компилироваться. Одна рекомендация, которую я бы дал, - это потерять все броски в стиле с. Это не решит проблему, которая у вас есть, что бы это ни было ... это должно быть где-то в коде, который вы не вставляете.