I'm a bit confused: I have a C++ API which is supposed to be called from C code and uses __cdecl in the function declarations.
There's a vtable with function pointers like this:
void (__cdecl *funptr) (const MyStruct& obj);
references are a C++ construct, are they not? How can there be a __cdecl with references?
And finally: is __cdecl equivalent to wrapping everything in an extern "C" statement? What about references in that case?
I'm a bit confused..
These are apples and oranges.
__cdeclis a non-standard keyword used to describe one of the more common x86 ABI calling conventions (together with__stdcall) which specifies how variables are passed/stacked between caller and callee. It has nothing to do with C specifically - some historic Microsoft C compiler just used this calling convention, hence the name. Many programming languages can use this calling convention and similarly, C code doesn't have to use it.extern "C"just means that the code should be compiled "like C" by the C++ compiler, disabling various name mangling etc used internally by the C++ compiler. It's not necessarily related to compliant C, but could as well be used when sharing code between two different C++ compilers that may use different name mangling.Neither has anything to do with how references work. In C they will not compile, in C++ they will compile. The code you posted is C++.