Because there's no assignment operator in:
C c4 = c1;
Like the comma, the equal sign can be either an operator or punctuation.
In an expression, it is always an operator, but in the above, the
initialization expression is simply c1
; the =
sign is punctuation,
indicating that copy initialization, rather than direct initialization,
is to be used. (Direct initialization would be
C c4( c1 );
and is, IMHO, generally preferable. In the case where the
initialization expression has the same type as the new object, however,
there is no difference.)