Здравствуйте, Lorenzo_LAMAS, Вы писали:
LL>В стандарте сказано, что функция, впервые объявленная другом, имеет внешнюю компоновку. Что происходит, если я пишу
LL>LL>//cl.h
LL>class A{
LL> friend void fun();//так как по аргументам функцию не найти, то я ее могу
LL>//теперь спрятать в какой-то единице трансляции, задав ей статическую
LL>//компоновку
LL>};
LL>//some_cpp.cpp
LL>#include “cl.h”
LL>static void fun(){
Это ошибка: одно и то же имя не может одновременно иметь internal и external linkage.
LL>///
LL>}
LL>
LL>Другом будет эта fun с внутренне компоновкой?
Нет. Код некорректен.
LL>А что произойдет, если я объявлю функцию не static, а в безымянном namespace?
Это будет просто функция в безымянном namespace.
А вот функция, объявленная в глобальном namespace и будет другом.
Руслан