The only difference between struct and class is the default access control for databases and members (both public and private). You can even declare the same type with one and define it with another (but note that some compilers may issue warnings on this).
Just use what is most natural to you. @WhozCraig correctly points out that since XImpl no longer available outside of the X implementation, so its private members seem redundant by default. However, as I said above, there is no difference here, since it only matters the keyword used for the definition.
Angew source share