Функция друга с именем test () определена внутри класса шаблона A:
template <typename T> class A {
public:
friend void cs() {/* code */}
}
Другой класс наследует от класса шаблона A:
class B : public A<B> {}
В основной функции мне не удалосьчтобы вызвать cs (), компилятор не сможет увидеть его объявление, если я не предоставлю объявление функции в глобальной области видимости:
int main(){
cs()
}
Но все иначе, когда cs принимает класс шаблона T в качестве аргумента:
template <typename T> class A{
public:
friend void cs(const T& t) {}
}
Теперь функция cs () может быть успешно вызвана в главной функции без декальтрации:
int main(){
B b;
cs(b);
}
Если функция принимает пользовательский класс в качестве аргумента, я знаю,компилятор будет искать область пользовательского класса.Итак, какой объем точно определен cs ()?Как это возможно, что cs () успешно вызывается во втором случае?