Я столкнулся с этим, компилируя переносимый код в gcc. В основном этот странный код компилируется в Visual Studio, который действительно просто дует в мой разум:
class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
Zebra y;
x = y;
foo(goo());
}
Visual studio позволяет этому летать. gcc воспримет это как ошибку компиляции. Интересно, что если вы напечатаете Zebra до int, VC++ будет жаловаться. Довольно противоречивое поведение. Мысли?