So I understand the reason why protected exists - there may be functions that general users don't need to use or shouldn't use, but are necessary if someone is inheriting from your class. That makes sense.
Friends also make sense. However, one thing that surprises me is that there's nothing besides Friend and non-Friend. Friend functions and classes have access to both protected and private methods and data members - wouldn't it make sense to also have another keyword to grant classes and functions access to (and only to) the protected members?
I can think of more than a couple examples that you'd want to allow access to protected methods, without giving them access to your private data members.
However, as far as I can tell, no such keyword exists. Does it, and I'm simply overlooking it? And, if not, is there a particular reason it doesn't exist?