我希望编译以下代码,但Visual Studio 2013 Update 2给了我一个错误,而g ++ 4.7编译得很好。
using std::vector;
using std::string;
struct Settings
{
vector<string> allowable = { "-t", "--type", "-v", "--verbosity" };
};
VS 2013编译失败:
'std::vector<std::string,std::allocator<_Ty>>::vector'
:没有重载函数需要4个参数
如果我按照以下方式更改成员,则编译正常:
vector<string> allowable = vector<string> { "-t", "--type", "-v", "--verbosity" };
我查看了Bjarne的proposal链接的FAQ,并且查看了已完成的C ++ 11功能的MSDN page在VS 2013中,但我仍感到困惑。它应该按原样编译,还是我错了,必须指定两次类型?
答案 0 :(得分:6)
您展示的示例是完全有效的C ++,但它不适用于VC ++ 2013。
这是自2013年10月31日以来报道的已知VC++2013 bug,其状态仍然有效。
但是,您可以通过解决方法来克服它。正如@ildjarn建议的那样,通过简单地添加一对花括号,可以强制initializer_list<>
std::vector
的构造函数而不是其填充构造函数,如下例所示:
#include <string>
#include <vector>
#include <iostream>
struct Settings {
std::vector<std::string> allowable = {{"-t", "--type", "-v", "--verbosity"}};
};
int main() {
Settings s;
for (auto i : s.allowable) std::cout << i << " ";
std::cout << std::endl;
}