Здравствуйте, iterator it, Вы писали:
II>Казалось бы вызов A a = A(5) должен привести к конструированию и последующему вызову конструктора копирования, но этого не происходит.
II>Вызывается только конструктор A(int).
II>то же самое происходит при вызове II>f(A(5)); // no copy constructor
II>Как это понимать? implementation defined? или это описано в стандарте?
Компилятор имеет право "выкидывать" копии конструктора копирования в таких случаях -- даже если конструктор копирования и, соответственно, деструктор, имеют побочные эффекты.
Замечу, что g++, начиная как минимум с 4.1 проделывают такую оптимизацию даже без включенных оптимизаций ("в дебаге"), и ее нужно иногда специально давить, чтобы отлавливать некоторые косяки в коде.