It seems you are right except for hasElaborateDestructor, since we must do memcpy to avoid calling destructor on void-initialized `result`.