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

xml*_*lmx 8 c++ compiler-errors visual-c++ c++11 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
}
Run Code Online (Sandbox Code Playgroud)

我的编译器是VC++ 2013 RC.

什么是g错的,f可以吗?

这是VC++的错误吗?

Rei*_*ica 11

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

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

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