次のコードを検討してください。
class Foo;
Foo& CreateFoo();
void Bar()
{
CreateFoo();
}
Visual Studioでは、これにより、Fooが未定義の型であるというエラーC2027が発生します。他のほとんどのコンパイラでは、正常にコンパイルされます。CreateFooの戻り値が割り当てられていない場合にのみ問題になります。行を次のように変更した場合:
Foo& foo = CreateFoo();
VisualStudioで正常にコンパイルされます。また、Fooが前方宣言されただけでなく定義されている場合は、割り当てなしで正常にコンパイルされます。
どちらが正しい動作である必要がありますか?これに対処するC++標準には何かありますか、それとも実装に任されているものですか?私はこれについて話しているものを見ましたが、何も見ませんでした。
更新: バグレポートが提出されました。