KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Clearly casting between function pointers and object pointers is undefined behaviour in the general sense, but POSIX (see: dlsym ) and WinAPI (see: GetProcAddress ) require this. Given this, and given the fact that such code is targeting a platform-specific API anyway, its portability to platforms where function pointers and object pointers aren't compatible is really irrelevant. But -Wpedantic warns about it anyway, and #pragma GCC diagnostic ignored "-Wpedantic" has no effect: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object [enabled by default] I want to keep -Wpedantic enabled, since it does give good warnings, but I don't want to have real warnings and errors lost amidst a sea of irrelevant warnings about function pointer to object pointer casts. Is there a way to accomplish this? Running GCC 4.8.0 on Windows (MinGW): gcc (rubenvb-4.8.0) 4.8.0 CODE SAMPLE #include <windows.h> #include <iostream> int main (void) { std::cout << *reinterpret_cast<int *>(GetProcAddress(LoadLibraryA("test.dll"),"five")) << std::endl; } Emits (with -Wpedantic ): warning_demo.cpp: In function 'int main()': warning_demo.cpp:7:87: warning: ISO C++ forbids casting between pointer-to-funct ion and pointer-to-object [enabled by default] std::cout << *reinterpret_cast<int *>(GetProcAddress(LoadLibraryA("test.dll"), "five")) << std::endl; ^
Tags (comma-separated)
Save Edits
Cancel