Нет, это невозможно сделать.Вы можете назвать только определенные классы или функции друзьями.Невозможно сделать пространство имен, включающее в себя глобальное пространство имен, другом.
Я думаю, что причина неэффективного обходного пути заключается в том, что когда вы определяете класс или функцию, допускается только одно определение (не учитываяперегрузки, которые действительно разные функции).Но вы можете открывать пространство имен столько раз, сколько захотите, и каждый раз добавлять в него дополнительные данные.Итак, если вы разрешаете доступ к определенному пространству имен, любой, кто захочет, может набрать:
namespace TheNamesapceWithAccess
{
// I've got access to it here too as well as
// to the original namespace definition that was
// the only one that was intended to be allowed access.
// And I could define a function here that allows access the private thing
// from outside this namespace. I've just subverted the access restriction
// you intended.
}