explicit
, тогда запись obj = 1;
будет некорректной. Foo(const Foo &foo); // Конструктор копирования
Foo(int i); // Неявный конструктор
Foo& Foo::operator= (const Foo &foo); // Оператор присваивания
затем потихоньку его заполнить - по нему всё равно пройдётся конструктор по умолчанию
"Is A() 0
Is A(int) 1"
Выглядит, как будто у "a" вызывается второй раз конструктор. Нужно всё логировать.
sddvxd
Hi! I am foo
Hi! I am tmp
Hi! I am foo. But i be renamed to tmp
tmp (on born be tmp) be destructed
tmp (on born be foo) be destructed