Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2006-07-18 13:26:59


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
 

  _____

From: Jonathan Franklin [mailto:franklin.jonathan_at_[hidden]]
Sent: Monday, July 17, 2006 23:52
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] A question about shared_ptr(Zhuo Hao)

On 7/16/06, Delfin Rojas <drojas_at_[hidden]> 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



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