I think the answer would be: At the point of type deduction ctor does not
know what type V is:
It knows that U is CMutex, but V is unknown. The following sample would
compile just fine:
class A1 {};
class A2 : public A1 {};
A2* a_null_ptr=NULL;
P<A1>(a_null_ptr);
or
P<A1>(static_cast(NULL));
Best Regards,
Ovanes Markarian
_____
From: Jonathan Franklin [mailto:franklin.jonathan@gmail.com]
Sent: Monday, July 17, 2006 23:52
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] A question about shared_ptr(Zhuo Hao)
On 7/16/06, Delfin Rojas wrote:
template <class U>
class P
{
public:
template <class V>
P(V * v) : u(v) {}
private:
U *u;
};
Now "P<CMutex> p1(0);" will not compile but "P<CMutex> p1(new CMutex);"
will.
I believe this is due to the fact that in C++ it is illegal for the compiler
to do more than one implicit cast. In this case it would have to implicitly
cast from <int>(0) to (0) and then implicitly cast again from (0)
to (0).
Jon