Вроде компилятор вполне поятно всё объясняет:
sss.cpp:3: warning: friend declaration `int f1(T1<type1>&, int)' declares a non-template function
sss.cpp:3: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
sss.cpp: In function `int f1(T1<type1>&, int)':
sss.cpp:11: warning: no return statement in function returning non-void
C:\Temp/ccQ8RvRo.o:sss.cpp:(.text+0x39): undefined reference to `f1(T1<int>&, int)'
C:\Temp/ccQ8RvRo.o:sss.cpp:(.text+0x4c): undefined reference to `f1(T1<double>&, int)'
collect2: ld returned 1 exit status
компилится и собирается следующий код:
class T1;
template<class type1>
int f1(T1<type1>& val, int val2);
template<class type1>
class T1 {
friend int f1<>(T1& val, int val2);
private:
type1 a;
};
template<class type1>
int f1(T1<type1>& val, int val2) {
val.a = val2;
};
int main() {
T1<int> rrr;
T1<double> rrr2;
f1(rrr, 7);
f1(rrr2, 9);
}
П.С. Если хочится плотно развликаться с шаблонами - выбрось дебилдер.
Там багов немерянно именно в обработке шаблонных конструкций.