[Bug c++/56568] New: std::initializer_list return value contents lost prematurely
potswa at mac dot com
gcc-bugzilla@gcc.gnu.org
Fri Mar 8 08:40:00 GMT 2013
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.
More information about the Gcc-bugs
mailing list