https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111803
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note clang also rejects this code for the same reason as GCC. Here is a reduced version which shows the difference between ICC/MSVC and GCC/clang: ``` struct A { int data; }; struct B : A{}; struct Container1 { template<typename DataType> void print(DataType B::*member); }; void setup1(Container1& container) { container.print(&A::data); // BROKEN IN GCC! } ``` Basically MSVC/ICC can cast between `float B::*` and `float A::*` ...