struct { int a, b; } f(int x, int y) // OK
{
return { x, y };
}
auto g(int x, int y) -> struct { int a, b; } // error C2332
{
return { x, y };
}
int main()
{
auto n = f(1, 2).a; // OK
}
我的编译器是VC ++ 2013 RC。
为什么g
错误而f
没问题?
这是VC ++的错误吗?
答案 0 :(得分:11)
实际上,在C ++中,在参数或返回类型中定义类型是否合法,无论是否命名。请参阅C ++ 11 [diff.decl]:
更改:在C ++中,可能无法在返回或参数类型中定义类型。在C中,允许使用这些类型定义
所以实际问题是第一个案件被接受,而第二个案件被拒绝。