This doesn't depend on any part of the private interface, so it can be made a non-member internal function.