This way all of the implementation details are going to be in the d-ptr. Then we also avoid the weird case where we don't initialize our d-ptr in certain constructors.
Because this only changes the size of the class it must be done after KF6 is branched.