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: [email protected]
ReportedBy: [email protected]
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.