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: unassig...@gcc.gnu.org

        ReportedBy: pot...@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.

Reply via email to