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<A2*>(NULL));
Best
Regards,
Ovanes
Markarian
On 7/16/06, Delfin Rojas <drojas@moodlogic.com> 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
<V *>(0) and then implicitly cast again from <V *>(0) to <U
*>(0).
Jon