Boost logo

Boost :

From: Kevin S. Van Horn (Kevin.VanHorn_at_[hidden])
Date: 2002-10-16 11:17:47

I'm still struggling to convince myself that Mojo is guaranteed to work by
the conversion rules in the standard. To recap: in a mojo-ized class X we
replace the usual X(X const &) copy ctor with

  X(X &);

and add conversions

  operator mojo::temporary<X>();


  operator mojo::constant<X>() const;

to class X. The crucial point on which this whole edifice stands or falls
is that if we need to copy a temporary of type X, then
X(mojo::temporary(X)) will be called. But there are two possibilities:

A: X([temporary object].operator mojo::temporary<X>())


B: X([temporary object].operator mojo::constant<X>()).

I've been looking through the Standard, and I haven't yet been able to
convince myself that overload resolution will choose A over B.

Can anyone explain to me why overload resolution will choose A over B?
Andrei's latest draft claims this is so because temporary<X> is derived
from constant<X>, but I think this is a red herring; as far as I can tell,
inheritance relations only affect overload resolution if you actually have
to do the conversion from derived to base in order to match a parameter

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