Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2002-10-16 10:22:21

"Kevin S. Van Horn" <Kevin.VanHorn_at_[hidden]> writes:

> A Mojo-enabled class X has ctors
> X(X&);
> X(mojo::constant<X>);
> X(mojo::temporary<X>);
> but does NOT have a ctor
> X(X const &);
> Now, section 12.8, paragraph 1 of the Standard states
> "A class object can be copied in two ways, by initialization (12.1, 8.5),
> including for function argument passing (5.2.2) and for function value
> return (6.6.3), and by assignment (5.17). Conceptually, THESE TWO
> (Emphasis added.) Section 12.1, paragraph 10 defines a copy ctor:
> "A copy constructor for a class X is a constructor with a first parameter
> of type X& or of type const X&."
> This implies that to return an rvalue of type X from a function, or to
> pass an rvalue as a function argument that is to be of type X, a
> constructor X(const X&) must exist and be accessible, since a copy ctor us
> used to return or pass the arguments, this ctor must take X& or X const &,
> and the X& form cannot be used with temporaries.
> But mojo-enabled classes don't have X const & ctors. Oops.
> But neither does auto_ptr<T>! So either there's a flaw in my reasoning,
> or there's a flaw in the Standard.

Well, we shouldn't be discussing MOJO in this forum, since Andrei
asked us not to. The issue is the same for auto_ptr, as you say. For
this answer, I'd say you should ask Bill Gibbons (bill_at_[hidden]).

           David Abrahams * Boost Consulting
dave_at_[hidden] *

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