Convert() vs constructors

convert happens automatically on assignment so don’t define a convert that will cause surprise if it gets called. Constructors are always explicit.
promote_type has no direct relation with convertion (i.e. defining it does not affect convertions at all). It’s result is expected to be used to call convert on by the caller, this includes lots of arithmetic functions.