Другие прояснили это, но я на самом деле скажу это. Да, вы можете использовать разные типы, но учтите, что если вы не используете друга, ваш класс не сможет получить доступ к закрытым членам класса, который передается с оператором.
То есть A не сможет получить доступ к B :: c, потому что это личное.