9
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++的错误吗?

4

1 回答 1

12

实际上,在 C++ 中,在参数或返回类型中定义类型是非法的,无论是否命名。参见 C++11[diff.decl]:

更改:在 C++ 中,类型可能未在返回或参数类型中定义。在 C 中,这些类型定义是允许的

所以实际的问题是第一个案例被接受,而不是第二个被拒绝。

于 2013-10-04T10:29:07.910 回答