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()13template< typename A > void S::foo() {} foo()14template< 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()28template< 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