http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56567

             Bug #: 56567
           Summary: ICE with lambda return type deduction and
                    braced-init-list
    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


#include <string>
#include <iostream>
#include <initializer_list>

int main() {
    for ( auto && s : []()
          { return { std::string( "first" ), std::string( "second" ) }; }() )
        std::cout << s << '\n';
}

ildtice.cpp: In lambda function:
ildtice.cpp:7:61: internal compiler error: in make_decl_rtl, at varasm.c:1136
  { return { std::string( "first" ), std::string( "second" ) }; }() )
                                                             ^

ildtice.cpp:7:61: internal compiler error: Abort trap: 6
g++: internal compiler error: Abort trap: 6 (program cc1plus)


C++11 5.1.2/4:
…
— if the compound-statement is of the form
{ attribute-specifier-seqopt return expression ; }
…

The return statement doesn't match the pattern because a braced-init-list is
not an expression. Should be a proper error.

Reply via email to