| // { dg-do compile } |
| // Contributed by: <fasbjx at free dot fr> |
| // PR c++/14389: Disambiguate overloaded member templates which differ only |
| // in the template argument list. |
| |
| namespace N1 { |
| |
| struct S { |
| template< typename B, typename A > void foo(); |
| template< typename A > void foo(); |
| }; |
| |
| template< typename A > void S::foo() {} |
| template< typename B, typename A > void S::foo() {} |
| |
| template void S::foo<void> (); |
| template void S::foo<void,void> (); |
| |
| } |
| |
| namespace N2 { |
| |
| struct S { |
| template< typename _A > void foo(); |
| template< int _i > void foo(); |
| }; |
| |
| template< typename _A > void S::foo() {} |
| |
| template void S::foo< 0 >(); // { dg-error "no definition available" "no def" } |
| // { dg-message "required" "instantiated" { target *-*-* } .-1 } |
| |
| } |