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