无法从大括号括起来的初始值设定项列表转换为 std::vector

Could not convert from brace-enclosed initializer list to std::vector

我看到了很多类似的问题,但我认为我看到的不是完全相同的问题。这是非常基本的。我讲师的一些代码无法编译,我将问题提炼到这个测试用例中:

void foo(vector<int> v) {
}

void fooUsage() {
    foo({0, 1, 2});
}

这失败了:

could not convert '{0, 1, 2}' from '<brace-enclosed initializer list>' to 'std::vector<int>

注意:它适用于 GCC 5.0.0 20141228 但在我的 GCC 4.7.1 (tdm-1) 上失败。

抱歉,如果这太基础了,但我不太了解 C++11。

这是一个known bug that was fixed in gcc 4.8

原来我只需要在gcc命令行中加上-std=c++11就可以了

注意:我误以为这是默认打开的,因为我也收到了一些这样的警告:

extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

看看它是怎么说的 "enabled by default"?这就是误导我的原因。