[cxx-abi-dev] Mangling of function-to-pointer conversion
    Jason Merrill 
    jason at redhat.com
       
    Wed Jan  4 19:04:07 UTC 2012
    
    
  
And then similarly,
template<typename T, int (*cmp)(T, T)> struct A { };
struct B {
   template<typename T> static int cmp1(T a, T b);
   static int cmp2(char a, char b);
   template <typename T> static void f (A<T,cmp1> &);
   template <typename T> static void f (A<T,cmp2> &);
};
void g()
{
   A<char,B::cmp1> a;
   B::f(a);
   A<char,B::cmp2> a2;
   B::f(a2);
}
Should the cmp1 in the first f be mangled as simply 4cmp1 or should it 
include B::?  That is,
_ZN1B1fIcEEvR1AIT_X4cmp1EE (which Clang produces)
or
_ZN1B1fIcEEvR1AIT_XsrS_4cmp1EE
?  I could go either way, but it seems that we've been leaning toward 
mangling expressions as written, which would suggest the former.
I think the second f should be
_ZN1B1fIcEEvR1AIT_L_ZNS_4cmp2EccEE
Jason
    
    
More information about the cxx-abi-dev
mailing list