Re: Returning a reference from a function.
On Thu, 12 Jul 2007 18:41:46 +0000, James Kanze wrote:
On Jul 12, 4:42 pm, Lionel B <m...@privacy.net> wrote:
On Thu, 12 Jul 2007 17:09:47 +0300, Juha Nieminen wrote:
Lionel B wrote:
Of course it's also *possible* (i.e. permitted by the language) -
but quite likely disastrous! - if the returned reference *is* to a
local object:
int& foo()
{
int a;
return a;
}
int main()
{
}
$ g++ -std=c++98 -pedantic scratch.cpp scratch.cpp: In function
?int& foo()?: scratch.cpp:3: warning: reference to local variable
?a? returned
(note warning, but no error).
Why is it not an error?
Because the Standard says it's not. I can't think off the top of my
head a valid scenario for doing this (no doubt someone here can...),
but there you go... C++ is renowned for supplying plenty of rope to
hang yourself.
The reason the standard says it doesn't require a diagnostic is because
it's impossible to determine in all cases.
Ok.
The standard doesn't have too many options: if it's an error (it is),
I think myself (and the OP) were using "error" as in "illegal code -
shouldn't compile"... at least that's what my compiler seems to call an
"error".
then it is either undefined behavior,
It is.
or a diagnostic is required. And since it is impossible for a
compiler to generate the diagnostic in every case...
....it might at least do so when it can, as it does in my example.
--
Lionel B