Это не вызываемый конструктор копирования, а
B(const A&);
Конструктор копирования всегда имеет такую сигнатуру:
B(const B&);
Поскольку вы не предоставили ее, компилятор генерируетдля вас конструктор копирования, но этот действительно не называется: у вас есть operator+
для B
, который принимает const B&
, но другой операнд имеет тип A
.Поскольку первый упомянутый конструктор (B(const A&)
) является неявным , это работает - создается временный B
из A
объекта с именем e
и вызывается оператор.
Чтобы сделать вывод в вашем примере более интуитивным, рассмотрите возможность изменения конструктора B(const& A)
на
B(const A&) { std::cout << "Construct B from A\n"; }