|
Boost Users : |
From: Brian Hassink (bhassink_at_[hidden])
Date: 2006-12-14 17:09:22
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
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net