Wpadłem na to podczas kompilowania jakiegoś przenośnego kodu w gcc
. Zasadniczo ten dziwny kod kompiluje w Visual Studio, które tak naprawdę wieje zdanie:Niezwiązana referencja związana z tymczasowym błędem Visual Studio?
class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
Zebra y;
x = y;
foo(goo());
}
Visual studio
pozwala tę jedną muchę. gcc
wykryje to jako błąd kompilacji. Co ciekawe, jeśli typedef Zebra do int, VC++
będzie skarżyć. Dość sprzeczne zachowanie. Myśli?
To nie jest błąd, to rozszerzenie kompilatora i zły. – chris
MSVC ma "ostrzeżenie C4239: niestandardowe rozszerzenie używane", ale najwyraźniej masz to ostrzeżenie wyłączone. – MSalters
Nie widzę powodu, dla którego musisz użyć funkcji nieskończonej rekursji, aby to demonstrować. – Neutrino