https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61769

theemathas at hotmail dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |---

--- Comment #4 from theemathas at hotmail dot com ---
(In reply to Jonathan Wakely from comment #2)
> (In reply to theemathas from comment #1)
> > I am having some problems with uploading the "main.ii" file (apparently it
> > is too big because I #include 3 standard libraries). I am uploading the
> > non-preprocessed source code first, and I will upload the preprocessed code
> > ASAP.
> 
> Don't bother, the program is invalid. std::abs returns a temporary that goes
> out of scope at the end of the expression, std::max returns a dangling
> reference to that temporary.

(In reply to Jonathan Wakely from comment #3)
> The for loop just causes the program to reuse the stack memory where the
> std::abs return slots were, so the memory where the dangling reference
> points gets modified and you see the value change.

I think my program is valid

According to http://en.cppreference.com/w/cpp/algorithm/max : std::max can
accept "const int&" as parameters

According to
http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/
: binding a temporary to a const reference "lengthens the lifetime of the
temporary to the lifetime of the reference itself"

Thus, no dangling reference.

Reply via email to