It seems logical that a class can access the internals of an external instance of a class of the same type as the class itself, because otherwise implementing a lot operators (like operator =, etc) would be impossible (or very messy), since the class would need to access the external instance's internals.