Here’s the test case…
class A {
public:
A() {}
virtual
~A() {}
};
class B : public A {
public:
B() {}
};
class X1 {
public:
X1(const
boost::shared_ptr<A>& a) {}
virtual
~X1() {}
};
class Y1 : public X1 {
public:
Y1(const
boost::shared_ptr<B>& b) : X1(b) {}
};
class X2 {
public:
X2(boost::shared_ptr<A>& a) {}
virtual
~X2() {}
};
class Y2 : public X2 {
public:
Y2(boost::shared_ptr<B>& b) : X2(b) {}
};
int main(int argc, char**
argv)
{
boost::shared_ptr<B> b(new B());
Y1 y1(b); // ptr
const in constructor, compiler ok
Y2 y2(b); // ptr
not const in constructor, compiler not ok
}
My question is why conversion of the shared_ptr reference does
not work if it is not declared const? Here’s the compiler error
(gcc 3.4.4 – cygming special)…
compiling main.cpp...
main.cpp: In constructor
`Y2::Y2(boost::shared_ptr<B>&)':
main.cpp:31: error: no
matching function for call to `X2::X2(boost::shared_ptr<B>&)'
main.cpp:23: note:
candidates are: X2::X2(const X2&)
main.cpp:25: note:
X2::X2(boost::shared_ptr<A>&)
make: *** [obj/main.o] Error
1
Thanks,
Brian