为什么未命名的结构不能用作尾随返回类型?

时间:2013-10-04 10:23:11

标签: c++ visual-c++ c++11 compiler-errors trailing-return-type

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

1 个答案:

答案 0 :(得分:11)

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

  

更改:在C ++中,可能无法在返回或参数类型中定义类型。在C中,允许使用这些类型定义

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