考虑以下代码:
class Foo;
Foo& CreateFoo();
void Bar()
{
CreateFoo();
}
在 Visual Studio 中,这将导致错误 C2027 表明 Foo 是未定义的类型。在大多数其他编译器中,它编译得很好。如果未分配 CreateFoo 的返回值,这只是一个问题。如果我将行更改为:
Foo& foo = CreateFoo();
它在 Visual Studio 中编译得很好。此外,如果 Foo 被定义而不仅仅是前向声明,那么它会在没有赋值的情况下编译得很好。
哪个应该是正确的行为?C++ 标准中是否有任何东西可以解决这个问题,或者这是留给实现的东西?我看了看,没有看到任何关于这个的东西。
更新: 已提交错误报告。