> Walter Karas wrote:
> > Consider this code:
> >
> > extern void foo(A &a);
> > extern void foo(A &&a);
> >
> > void bar(void)
> > {
> > A a,*ap = new A;
> >
> > foo(*ap);
> > delete ap;
> >
> > foo(a);
> > }
> >
> > Would the compiler be required or allowed to use the
> > second overload of foo() for either of the two calls to
> > foo() in bar() ?
>
> No. 'a' and '*ap' are not rvalues, so in your example,
> foo(A&&a) will never be called.
Could it be forced like this?
foo(static_cast<A &&>(*ap));
foo(static_cast<A &&>(a));
>
>
> > Separate question: was consideration given to
> requiring
> > functions that take a rvalue reference to be equivalent
> to
> > an explicit destructor call on the object? And, in a
> > question related to that question, does/should the
> > Standard require that this:
> >
> > ap->~A();
> > delete static_cast<void *>(ap);
> >
> > work?
>
> I guess N1377 section "Alternative move designs" might be
> of help to you:
>
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n13> 77.htm#Alternative%20move%20designs
>
> Happy programming!
>
> -- Niels