2012-12-23 40 views
4
struct X 
{ 
    int a; 
    int b; 
}; 

int f(X x) 
{ 
    return x.a + x.b; 
} 

int main() 
{ 
    int n = f({1, 2}); 
} 

的Visual Studio 2012(十一月CTP)报道:为什么初始化列表不能用作参数?

error C2664: 'int f(const X &)' : cannot convert parameter 1 from 
'initializer-list' to 'X' 

Reason: cannot convert from 'initializer-list' to 'X' 
Only an initializer-list with zero or one elements can be converted to this type 

Build FAILED. 
+2

Clang 3.1和g ++ 4.7.2编译这段代码没有任何错误。 – soon

+0

然后这似乎是一个VC++的bug,虽然它声明它已经支持这个功能。 – xmllmx

+0

已知VC++在不同部分被打破 –

回答

1

的Visual Studio 2012(十一月CTP)报道:

它甚至不是一个测试编译器。它应该工作。我会链接到你在ideaone上的代码,但是这个网站不会那么做。

提交错误报告。

+2

顺便说一句,这里的[Ideaone链接](http://ideone.com/05feuD)该网站不会让我使用。 –

1

如果你想列表样式语法通过初始化程序到你的构造函数,那么你必须一个std::initializer_list类型传递给你的构造。这种类型将在传递{ }语法样式构造时构造一个类型的数组。

+0

我觉得这种风格很有表现力。标准为什么不支持它? – xmllmx

+2

如果我必须添加一个构造函数,那么X不再是POD类型,这正是我想要的。 – xmllmx

相关问题