Здравствуйте, remark, Вы писали:
R>Здравствуйте, tealex, Вы писали:
T>>О всевышний ! Ответь мне на вопрос !
T>> Counter (Counter const& x)
Посколько конструктор копирования принимает только неконстантную ссылку, то компилятор не может скопировать временную переменную, созданную в operator++() в возвращаемое значение. Поэтому msvc производит достаточно странную последовательность действий. Она вызывает у временного объекта operator float(), потом преобразует float в int, потом конструирует возвращаемое значение с помощью этого int'а.
Подозреваю, что такая последовательность преобразований является расширением msvc и не соотв. стандарту, т.к. содержит 2 пользовательских преобразования.
Если быть более точным, то msvc может связать временный объект и неконстантную ссылку. Просто видимо она считает это преобразование менее приоритетным. Сказать тут что-либо сложно, т.к. оба преобразования — расширения msvc. А эти расширения являются большей частью недокументированными.
Если это всё подытожить, то надо передавать копию в конструктор копирования как константную ссылку.
R>