You also need to test `hasElaborateAssign`.

Once you test `hasElaborateAssign`, I don't think there's any need to test for `hasElaborateCopyConstructor!T` or `hasElaborateDestructor!T` either. Just:

```D
static if (hasElaborateAssign!T || !isAssignable!T)
```
In that order. Unless I missed something? It's what we do in the rest of phobos anyways.