1// { dg-do assemble } 2// 3// Copyright (C) 2000 Free Software Foundation, Inc. 4// Contributed by Nathan Sidwell 14 Aug 2000 <nathan@codesourcery.com> 5 6// A pointer to member can only be formed by `&T::m', however, other forms 7// are ok for pointer to static member. Thus the error can only be determined 8// after overload resolution. In template deduction, this can disambiguate 9// otherwise ambiguous cases. 10 11struct A 12{ 13 static int f (int); 14 int f (short); 15 void baz (); 16}; 17 18template <typename T> void foo (int (*)(T)); // { dg-message "candidate" } 19template <typename T> void foo (int (A::*)(T)); // { dg-message "note" } candidate 20 21 22void A::baz () 23{ 24 foo (&A::f); // { dg-error "ambiguous" } 25 foo (A::f); 26 foo (&(A::f)); 27 foo (f); 28 foo (&f); 29} 30