[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