Интересно, что неправильно прочитанный код все еще возможен, если Foo
имеет неявный конструктор, который принимает указатель Foo*
.
#include <iostream>
class Foo{
public:
Foo() {}
Foo(Foo*) { std::cout << "Aha!\n"; }
};
int main(){
Foo* pf = new Foo;
Foo f = (const Foo&)pf;
std::cin.get();
}
См. Вывод в Ideone .
Интересно, что если вы сделаете конструктор явным, он покажет неопределенное поведение, объясненное @ usta.