未在命名空间中声明和定义的命名空间 class 的朋友

Namespace's class's friend that is not declared and defined in the namespace

这样做对吗:

void f();

namespace ns
{
    class C
    {
        int m;
        friend void ::f();
    };
}

void f()
{
    ns::C c;
    c.m = 2;
}

?

代码在VS中编译成功。但是我找不到任何有关在标准中为友元声明限定名称空间的信息。它甚至是合法的吗?有人可以提供 link 或标准中的引述吗?

是的,这是合法的。

A namespace 只不过是为函数添加另一层描述的一种方式,类, &c..

任何函数都可以标记为 class 中的 friend,即使 class 与函数位于不同的 namespace 中。该函数也可以在 namespace 中。

标准中没有关于此的具体部分,但它是标准的必然结果。这个参考是一个起点:https://en.cppreference.com/w/cpp/language/namespace