友元声明和显式模板实例化声明

Friend declaration and explicit template instantiation declaration

假设我有一个函数模板

template <typename T>
void f(T) {}

然后,我们就可以进行好友声明了

friend void f<int>(int);

和显式模板实例化声明

extern template void f<int>(int);

这两个声明在某种程度上是相关的还是完全独立的?如果相关,它们如何相互作用?

一个 friend 声明没有 "interact" 任何东西,除了被声明为友元的函数的定义,它被允许访问 [= 的私有成员18=] 包含声明。

所以,不,friend 声明和 extern template 声明之间没有特殊的交互作用,尽管它们都引用相同的函数(在这个意义上,它们是相关的,但我假设你在写问题时意识到这一点)。