Сначала то, что должно работать, потом то, что не работает. Почему это не вопрос.
Я объявляю два класса:
class Base { ... };
class Derived : public Base { ... };
Тогда у меня есть следующая функция:
void foo(shared_ptr<Base> base);
Следующий код должен работать правильно?
share_ptr<Derived> derived;
foo(derived);
Теперь, забудьте выше, я объявляю три класса:
class Foo { ... };
template <typename TYPE> class Base { ... };
class Derived : public Base<Foo> { ... };
В другом месте я объявляю шаблонную функцию:
template <typename TYPE> void foo(shared_ptr<Base<TYPE> > base);
Следующий код не работает:
shared_ptr<Derived> derived;
foo(derived);
Он говорит, что не найдена соответствующая функция foo (...), которая принимает share_ptr<Derived>
Во-первых, должен ли работать оригинальный пример? И во-вторых, как вы думаете, может быть проблема во втором примере, где у меня есть shared_ptr
для класса, производного от специализированного базового класса.