This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/56568] New: std::initializer_list return value contents lost prematurely


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]