C++ 为什么不能将未命名的结构用作尾部返回类型?

C++ 为什么不能将未命名的结构用作尾部返回类型?,c++,visual-c++,c++11,compiler-errors,trailing-return-type,C++,Visual C++,C++11,Compiler Errors,Trailing Return Type,我的编译器是VC++2013 RC 为什么g错误而f正常 这是VC++的bug吗?< P>。实际上,C++中,在参数或返回类型中定义类型,命名为NOR。参见C++11[diff.decl]: < > >强> >: > C++中,类型不可定义为返回或参数类型。在C中,这些类型定义是允许的 所以实际问题是第一个案例被接受,而不是第二个被拒绝。你确定你正在编译一个C++而不是C?@杰西,是的。我用C++编译了它。否则,auto也将触发编译器错误。@xmllmx Um,no.auto是C中有效的存储持续

我的编译器是VC++2013 RC

为什么
g
错误而
f
正常


这是VC++的bug吗?

< P>。实际上,C++中,在参数或返回类型中定义类型,命名为NOR。参见C++11[diff.decl]:

< > >强> >:<强> > C++中,类型不可定义为返回或参数类型。在C中,这些类型定义是允许的


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

你确定你正在编译一个C++而不是C?@杰西,是的。我用C++编译了它。否则,
auto
也将触发编译器错误。@xmllmx Um,no.
auto
是C中有效的存储持续时间说明符。@H2CO3:但不是有效的返回类型。@MikeSeymour肯定:)
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
}