Explicit define generated methods where the pairing (constructor/assignment) is partly broken by the existence of user-defined methods.
In some cases, it can be sufficient to simply remove the user definition and rely entirely on generated methods. In other cases, the user-defined methods are useful to retain. So we need to declare defaulted versions. This change is largely driven by new warnings from gcc-9.2.