http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46766
--- Comment #4 from Fredrik Hederstierna <fredrik.hederstie...@securitas-direct.com> 2010-12-02 15:55:05 UTC --- Yes, I agree its EURGH. I guess its not preferred to make C++ template-alike code in C. I think its worth avoid stuff like: #ifdef BLAH_BLAH_BLAH #define RETURN_TYPE_C_TEMPLATE void #define PARAM_TYPE_C_TEMPLATE void #define PARAM_TYPE_C_TEMPLATE_VARIABLE #else #define RETURN_TYPE_C_TEMPLATE int #define PARAM_TYPE_C_TEMPLATE int #define PARAM_TYPE_C_TEMPLATE_VARIABLE var #endif RETURN_TYPE_C_TEMPLATE func( PARAM_TYPE_C_TEMPLATE PARAM_TYPE_C_TEMPLATE_VARIABLE ) { return (RETURN_TYPE_C_TEMPLATE) template_func1( PARAM_TYPE_C_TEMPLATE_VARIABLE ); } int main(void) { func((PARAM_TYPE_C_TEMPLATE) template_func2()); return ERR_EURGH; }