Mi sono imbattuto in questo mentre compilavo del codice portatile in gcc
. Fondamentalmente questo strano codice viene compilato in Visual Studio, che in realtà solo soffia la mia mente:Riferimento non costante associato a errore temporaneo di Visual Studio?
class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
Zebra y;
x = y;
foo(goo());
}
Visual studio
consente questa mosca. gcc
prenderà questo come errore di compilazione. È interessante notare che, se digiti Zebra su int, VC++
si lamenterà. Comportamento abbastanza contraddittorio Pensieri?
Non è un bug, è un'estensione del compilatore e malvagio. – chris
MSVC ha l'avvertenza C4239: estensione non standard utilizzata, ma apparentemente l'avviso è disattivato. – MSalters
Non vedo perché è necessario utilizzare una funzione infinitamente ricorsiva per dimostrarlo. – Neutrino