------- Comment #3 from jaco at kroon dot co dot za 2006-09-15 06:21 ------- Ok. My understanding of CXX ABI isn't that great. Some would say "I just code with C/C++" but I also happen to know that that isn't true. Take what I say here as "I'm a user of C/C++ and my understanding of everything behind the scenes may not quite be what it should".
It's a typedef for a function pointer that takes a void* parameter. Whether we use it in C/C++ the actual calling semantics should be the same afaik. aka, we push the void* onto the stack, and issue the call to the given pointer address. The size of the actual pointer should be the same size whether we use C or C++, so I fail to see how this would make a difference. The other solution is to close the #ifdef and re-open it, and that imho will look a lot uglier. It won't make a difference to the "C" compiled version (when compared to moving the typedef), whereas I simply fail to see the difference when compiling as a "C++" program (if there is any). As for regression, this worked in 3.4.6, at which point the typedef was absent, and instead the function pointer signatures was handled inside the function declarations: void* __cxa_vec_new(size_t __element_count, size_t __element_size, size_t __padding_size, void (*__constructor) (void*), void (*__destructor) (void*)); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29095