Здравствуйте, Евгений Музыченко
Вы хотите указать метод того класса, который ещё не определён, как дружественный?
Если этот класс, который с дружесвенным методом, принимать как параметр шаблона, то это может получится
#include <iostream>
template <typename T>
struct restricted
{
friend void T::go(const restricted &) const;
private:
int value{55};
};
struct agent
{
template <typename T>
void go(const T & r) const
{
std::cout << r.value << '\n';
}
};
int main()
{
restricted<agent> v;
agent a;
a.go(v);
return 0;
}
Output:
55
Если имя метода, который вы хотите указать как friend, сделать зависимым от шаблонного параметра, то
разрешение имён откладывается до мемента инстанцирования.
Про это есть видео на ютуб канале Константина Владимирова