http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54895
Bug #: 54895 Summary: the compiler treats '__cdecl' & '__stdcall' as the same. Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: i.nix...@gmail.com When I compile this simple code: void myfoo(void(__cdecl*)()){} void myfoo(void(__stdcall*)()){} int main(){} I get the following error: Assembler messages: Error: symbol `__Z5myfooPFvvE' is already defined Why the compiler treats theese two specificators as the same? Another example code work as expected: template<typename T, typename U> struct is_same { enum { value = 0 }; }; template<typename T> struct is_same<T, T> { enum { value = 1 }; }; int main() { typedef void(__stdcall* stdcall_func_ptr)(); typedef void(__cdecl* cdecl_func_ptr)(); return is_same<stdcall_func_ptr, cdecl_func_ptr>::value; } main returns 0