Re: operator class&() { return *this; } considered harmful?
On 10/30/07 11:18 PM, in article 4727ef35$1@clarion.carno.net.au, "Michael
Norrish" <michael.norrish@nicta.com.au> wrote:
Alberto Ganesh Barbati wrote:
Michael Norrish ha scritto:
Clearly, the rvalue reference proposal solves all sorts of other
interesting issues apart from the one in my example, but my question
is really whether or not
operator C&() { return *this; }
will safely achieve what I want.
I don't think so. According to my interpretation, 12.2/5 doesn't apply
here, because in line:
C &x = f();
the reference x is *not* bound to a temporary, but rather to the result
of the call to operator C& which is a reference (such reference
*happens* to be bound to a temporary but this fact is irrelevant to a
strict interpretation of 12.2/5).
I expect the temporary to be properly destroyed at the end of the
full-expression, making x a dangling reference.
If this is so, is there any point to the language in 8.5.3/5 allowing
this? (This language is "if the initializer expression ... has a
class type ... and can be implicitly converted to an lvalue....". The
footnote emphasises that this situation can only arise when you have a
conversion function returning a reference type.)
There is little point in defining a conversion to a reference of the same
class type - because an object can always be used to initialize a reference
of its own type. In other words, adding the C&() operator has no real effect
on the program (except to make it more difficult for the compiler to warn
that the function f() is returning a reference to a de-allocated object.)
Moreover, having f() return a C object by value would not only be safe, but
would also be slightly more efficient than the current implementation of f()
(owing to the Named Return Value Optimization).
Greg
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]