From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28807 invoked by alias); 10 Jul 2014 10:15:23 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 28466 invoked by uid 48); 10 Jul 2014 10:15:12 -0000 From: "theemathas at hotmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/61769] const reference value is changed to random by a range-for loop Date: Thu, 10 Jul 2014 10:15:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 4.8.2 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: theemathas at hotmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_status resolution Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-07/txt/msg00622.txt.bz2 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.