我错过了什么?以下代码使用 g++ 按预期编译。
#include <functional>
#include <iostream>
#include <string>
using namespace std;
typedef std::function<void()> Foo;
/* This function does NOT make g++ segfault */
Foo factory() {
return [] {cout << "Hi!" << endl;};
};
int main() {
/* This nested lambda makes g++ segfault */
// function<Foo()> factory = [] {
// return [] {cout << "Hello!" << endl;};
// };
factory()();
return 0;
}
使用的编译标志:
g++ -c -Wall -std=c++0x NestedLambdaProblem.cpp
如果我取消注释在 main 中用 // 注释掉的三行,编译器会出现这样的段错误
$ g++ -c -Wall -std=c++0x NestedLambdaProblem.cpp
g++: internal compiler error: Segmentation fault (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
关于使用的 g++ 版本:
$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3