Вероятно я чего-то туплю, но вот такой вроде бы нормальный код не компилируется, выдает ошибку
error C2664: 'MyTemplate<T>::Foo' : cannot convert parameter 1 from 'Derived *' to 'Base &'
(MSVC 2008)
template<class T>
class MyTemplate
{
public:
void Foo(T arg) {};
};
class Base
{
public:
int x;
};
class Derived : public Base
{
public:
int y;
};
typedef Base* BasePtr;
typedef MyTemplate<BasePtr&> MyTemplateClass;
int main()
{
MyTemplateClass obj;
Derived *p = new Derived;
obj.Foo(p);
return 0;
}
Почему? Я же хочу ссылку на указатель, а не ссылку на объект!