Учитывая класс с параметром шаблона, не относящимся к типу, возможно ли, что для любой пары значений аргумента классы являются взаимно дружественными?

#c #templates #c 17 #non-type-template-parameter

#c #шаблоны #c 17 #не-тип-шаблон-параметр

Вопрос:

В приведенном ниже коде я хотел бы, чтобы это A<N> было другом A<M> для любой пары M и N . Возможно ли это? Ниже вы можете найти мою попытку, которая не компилируется.

 template <int N> class A {
    int x = N;

    template<int M> friend A<M>;
public:
    template<int M> void copy(const A<M>amp; a) {
        x = a.x;
    }
};

void foo() {
    A<2> a2{};
    A<3> a3{};
    a2.copy(a3);
}
 

Ответ №1:

ДА. Правильный синтаксис

 template<int M> friend class A;