X works but Y does not. Whats the difference between X and Y? And passing them as base reference to foo?
class Base { };
class Derived : Base{};
void foo(Base& p) {}
int main() {
Derived x = Derived();
Derived y();
foo((Base&)x);
foo((Base&)y);
}