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いるのにOKなのですか?

これは VC++ のバグですか?

4

1 に答える 1

12

実際、C++ では、名前の有無にかかわらず、パラメーターまたは戻り値の型で型を定義することは違法です。C++11 [diff.decl] を参照してください。

変更: C++ では、戻り値またはパラメーターの型で型を定義できない場合があります。C では、これらの型定義が許可されています。

したがって、実際の問題は、最初のケースが受け入れられることであり、2 番目のケースが拒否されることではありません。

于 2013-10-04T10:29:07.910 に答える