This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/56568] New: std::initializer_list return value contents lost prematurely
- From: "potswa at mac dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 08 Mar 2013 08:39:33 +0000
- Subject: [Bug c++/56568] New: std::initializer_list return value contents lost prematurely
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56568
Bug #: 56568
Summary: std::initializer_list return value contents lost
prematurely
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: potswa@mac.com
See http://stackoverflow.com/q/15286450/153285
This program segfaults:
#include <string>
#include <iostream>
#include <initializer_list>
int main() {
for ( auto && s : []() -> std::initializer_list< std::string >
{ return { std::string( "first" ), std::string( "second" ) }; }() )
std::cout << s << '\n';
}
The return value object should be initialized from the braced-init-list, and
bound directly to the implicit "auto && __range" object of the range-based for
statement. The array backing that object should have the same lifetime as it,
namely the duration of the loop. Instead, the array is destroyed when the
lambda exits.
This is not easy to fix, but I'll just file this.