1 // PR c++/15629
2 // { dg-do link }
3 
4 template<int a, int b> class T;
5 
6 template<int a, int b> void func(T<a, b> * t);
func(T<a,3> * t)7 template<int a>        void func(T<a, 3> * t) {}
8 template void func<2>(T<2, 3>*);
9 
10 template<int a, int b> struct T {
11   friend void func<a, b>(T<a, b> * t);
12   friend void func<a>   (T<a, 3> * t);
13 
14   void foo();
15 };
16 
foo()17 template<int a, int b> void T<a, b>::foo() {
18   func((T<2,3>*)0);
19 }
20 
main()21 int main() {
22   T<2,3>().foo();
23 }
24