MSVC имеет предупреждение компилятора C4440 :
// library code
#pragma warning(push)
#pragma warning(error: 4440)
template<typename F> void must_be_stdcall(F*) { typedef F __stdcall* T; }
#pragma warning(pop)
// test code
void __stdcall stdcall_fn() {}
void __cdecl cdecl_fn() {}
int main()
{
must_be_stdcall(&stdcall_fn); // OK
must_be_stdcall(&cdecl_fn); // error
}
Это может быть typedef decltype(foo) __stdcall* T;
, где foo
- это функция (обратите внимание, что должно быть foo
, а не &foo
), но она не работает со статическими функциями-членами.