end up making two constructor calls? I thought the pass by reference would
have avoided the second call....is it beacuse the assign() call has a const
so a second copy must be made?

Thanks for your help

Regards

Michael

The second call is invoked on a temporary. Which would fail if A's
ctor was 'explicit'.
Instead of void A::assign(const A& a) you might consider a rudimentary
setter since class A will already have a compiler generated copy ctor
(assuming the compiler detects that one is needed). Which explains the
output below.