为什么以下代码不允许调用 foo(ptr) ?
#include <boost/scoped_ptr.hpp>
struct A {
virtual ~A() {}
};
struct B: public A {};
void foo(boost::scoped_ptr<A>& a) {}
void goo(A& a) {}
int main() {
boost::scoped_ptr<B> ptr(new B);
foo(ptr);
B b;
goo(b);
}
我们传递引用的相应表单按预期工作。我们不应该用 boost scoped_ptr 做多态性吗?
带有 boost 1.49 的 g++ 给了我:
error: invalid initialization of reference of type ‘boost::scoped_ptr<A>&’ from expression of type ‘boost::scoped_ptr<B>’