我很惊讶地发现以下代码在MSVC下编译,运行和生成预期输出:
#include <iostream>
using namespace std;
struct Foo{
int _x;
Foo(int x): _x(x) {}
} //Note: no semi-colon after class definition.
//Makes this behave as a return type for the following function:
Foo_factory(int x)
{return Foo(x);}
int main (int argc, char* argv[])
{
Foo foo = Foo_factory(42);
cout << foo._x << endl; //Prints "42"
return 0;
}
我不太惊讶地看到MinGW无法使用错误进行编译&#34;新类型可能未在返回类型中定义&#34;。这只是该标准的另一个Microsoft例外,还是这个合法的C ++?
答案 0 :(得分:6)
在N3797(C ++ 14)和N3485(C ++ 11)中,§8.3.5[dcl.fct] / 9明确地以:
开头不应在返回或参数类型中定义类型。
因此,您的代码无效,GCC对其进行诊断是正确的。