https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79307
Bug ID: 79307 Summary: g++ misses warning for reference on temporary that invokes undefined behaviour Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: steven.spark at gmail dot com Target Milestone: --- I thought (something like) this was fixed in bug 986 Code: struct TestRefInt { TestRefInt(const int& a) : a_(a) {}; void DoSomething() { cout << "int:" << a_ << endl; } protected: const int& a_; }; TestRefInt tfi(55); int main() { TestRefInt ltfi(8); tfi.DoSomething(); ltfi.DoSomething(); return 0; } The first one does not work, the second one happens to work (but only by "accident"). Similar issue: struct TestRefIntDirect { TestRefIntDirect(int a) : a_(a) {}; void DoSomething() { cout << "int:" << a_ << endl; } protected: const int& a_; }; Lifetime of the temporary is not extended in neither case (as per C++11 standard 12.2 p5). Tested with MinGW 5.3.0, avr-g++ 4.8.1, 4.9.2. I would like if warning were produced for these. Any help would be appreciated. I posted more details on stack overflow http://stackoverflow.com/questions/41928634/c11-scoping-and-lifetime-of-temporary-bound-to-a-const-reference-gcc Possible duplicate of bug #44859 or bug #51270.