// { dg-do assemble } // Copyright (C) 1999 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 21 May 1999 // Template deduction and type unification should not issue diagnostics when // they're trying to see if it's possible. Here deduction fails in some cases // because you cant cv qualify a function type. template void fn(){} // A template void fn(T const *){} // B // these next two specializations need to know if they're specializing A or B. // They specialize A, because they can't instantiate B. template<> void fn() {} // ok, specialize A template<> void fn() {} // ok, specialize A // now make sure we moan when we really should template void foo(T const *){} // { dg-message "note" } void f() { foo(); // { dg-error "" } attempt to build int & const * // { dg-message "candidate" "candidate note" { target *-*-* } 26 } foo(); // { dg-error "" } attempt to build void (const *)() // { dg-message "candidate" "candidate note" { target *-*-* } 28 } } typedef void (*Fptr)(); template void PV(Fptr const &, T const * const &); template void PV(T1 const * const &, T2 const * const &); void baz() { void *t; PV(&baz, t); }