Почему неквалифицированный экземпляр функции шаблона без угловых скобок не может быть другом класса? - PullRequest
1 голос
/ 31 декабря 2011

Вот мой код:

#include<iostream>

class foo;
template<typename T> void bar(T a) { std::cout<< a.var; }

class foo { 
    int var;
    public: 
      friend void bar(foo); //here, bar function template is declared in global namescope,
      // deduction can deduce which template instance we're talking about. 
      //Note: If I place <> just after name bar or qualify bar like ::bar , it all works then.
};

int main() {
    foo fooo;
    bar(fooo);
}

ошибка: /home/O1wLF2/cc1xOI20.o: в функции 'main': prog.cpp :(. Text + 0x46): неопределенная ссылка на 'bar(foo) '

Что я хочу знать, почему экземпляр неквалифицированной шаблонной функции не может быть другом?

1 Ответ

3 голосов
/ 31 декабря 2011

Вы делаете не шаблонную функцию другом. Вам нужно сообщить компилятору, что вы хотите сделать шаблон другом или одним из экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...