Boost logo

Boost :

From: Daniel Wallin (dalwan01_at_[hidden])
Date: 2004-02-11 03:47:12

David B. Held wrote:
> "Daniel Wallin" <dalwan01_at_[hidden]> wrote in message
>>No it should work as expected. This specialization forbids construction
>>from lvalues, conversions too.
>> struct cant_move_from_const<
>> const smart_ptr<U, BOOST_CONVERSION_POLICIES>
>> >;
> I don't see how. This only gets "activated" during a call to:
> template <typename P>
> smart_ptr(P&, cant_move...<>);
> But, in this case:
> smart_ptr<Base, destructive_copy> p(
> smart_ptr<Derived, destructive_copy>(new Derived)
> );
> The better match is not smart_ptr(P&) but rather
> smart_ptr(smart_ptr<U>&), because the latter is more specialized.
> This seems to totally circumvent your system. Does the conversion
> c'tor also need to use the cant_move device? I.e.:
> template <typename U, policies...>
> smart_ptr(smart_ptr<U, policies>&p, cant_move..);

No, it doesn't need to be the best match. The error is generated when
the overload is considered during overload resolution. Whenever U is
substituted by smart_ptr<U, ...> const the compilation fails.

> <snip> If you are interested in trying to diagnose the problem
> yourself, I will try to update the sandbox with my working version.

Yes I can take a look at it. I only have access to gcc3.3.1 and and
2.95.3 though.

Daniel Wallin

Boost list run by bdawes at, gregod at, cpdaniel at, john at