Clearly casting between function pointers and object pointers is undefined behaviour in the general sense, but POSIX (see: [*dlsym*](http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html)) and WinAPI (see: [*GetProcAddress*](http://msdn.microsoft.com/en-ca/library/windows/desktop/ms683212(v=vs.85).aspx)) 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;

       ^

```