Since a definition of the class is not in the header, no other compilation units can safely access the internals of the Impl class anyway, so it may as well be a regular struct so that the outer class (SimulatorIncompTwophase) can access it.