[cfe-dev] Pointers to Overloaded C Functions

George King gwk.lists at gmail.com
Mon Jan 4 11:53:21 CST 2010


I am experimenting with clang's overloaded C functions, and I can't figure out how to get a pointer to an overloaded function. 

test program:

#define OL __attribute__((overloadable))

void OL a(int x) { printf("i: %d\n", x); }
void OL a(float x) { printf("f: %f\n", x); }

int main(int argc, char** argv)
{
    a(1);
    a(1.0f);
    
    void(*a_i_ptr)(int) = a;
    void(*a_f_ptr)(float) = a;
    
    return 0;
}


compiler output:

> clang test_ol.c 
test_ol.c:25:11: error: incompatible type initializing '<overloaded function type>', expected
      'void (*)(int)'
    void(*a_i_ptr)(int) = a;
          ^               ~
test_ol.c:26:11: error: incompatible type initializing '<overloaded function type>', expected
      'void (*)(float)'
    void(*a_f_ptr)(float) = a;
          ^                 ~
2 diagnostics generated.


If I change the name of one of the functions, then it compiles; clang appears well aware of the syntactic ambiguity. Is there a more specific syntax to specify which function I'm  referring to?

Something like "void(*a_i_ptr)(int) = a(int);" makes sense to me, but I imagine that it's a stretch as far as extending the language goes. 

Thanks,

George




More information about the cfe-dev mailing list