1 // { dg-do compile }
2 // Contributed by: <fasbjx at free dot fr>
3 // PR c++/14389: Disambiguate overloaded member templates which differ only
4 //  in the template argument list.
5 
6 namespace N1 {
7 
8 struct S {
9     template< typename B, typename A > void foo();
10     template< typename A >             void foo();
11 };
12 
foo()13 template< typename A >             void S::foo() {}
foo()14 template< typename B, typename A > void S::foo() {}
15 
16 template void S::foo<void> ();
17 template void S::foo<void,void> ();
18 
19 }
20 
21 namespace N2 {
22 
23 struct S {
24   template< typename _A > void foo();
25   template< int _i >      void foo();
26 };
27 
foo()28 template< typename _A > void S::foo() {}
29 
30 template void S::foo< 0 >();    // { dg-error "no definition available" "no def" }
31 				// { dg-message "required" "instantiated" { target *-*-* } .-1 }
32 
33 }
34