В C ++ друзья не переходные.Друзья ваших друзей не обязательно являются моими друзьями.
Делая Nested защищенным в A, вы указываете, что все подклассы могут использовать этот элемент, но никто другой не может использовать его.Вы можете считать это своего рода другом.A делает всех подклассов друзьями в отношении доступа к вложенной структуре.
Теперь B делает C другом, но это не значит, что C также является другом A. Поэтому C не должен иметь доступа к Nested.
НО: поведение изменено с C ++ 03.В C ++ 03 вложенный класс является полноправным членом включающего класса и поэтому имеет полные права доступа.Дружба по-прежнему НЕ транзитивна, но теперь ее член имеет доступ.
Возможно, вы захотите взглянуть на http://www.rhinocerus.net/forum/language-c-moderated/578874-friend-transitive-nested-classes.html,, который объясняет аналогичную проблему.