I believe the definition only of offsetof(...) is causing this warning to appear. Since ptr type is being converted to size_t , which itself is unsigned __int64 in WIN64.
In this case, rest assured, this warning should not cause much trouble , since size_t (which is typedef'ed appropriately) generally has the size of pointer in either 32-bit or 64-bit system.
If in all cases, if you assure yourself, that the conversion from pointer to integral type is not losing the bits, like for eg. when you do something like:-- (int)(int*)9 , then you can avoid any runtime problems.
And offsetof definition in my and most Windows systems seem to be clean enough to get across portability flaws.
Though I still do not know why all Intel compilers display this warning for the clean typecastings too, and will check out with someone.
The warning comes out due to the compiler not knowing whether the integer data type will be made consistent with pointer, should you shift to a 64-bit system. It doesn't refer back to the typedefs invoked in the macro. I have had customers who refused to accept a size_t differing from int or long, as they didn't want to be required to consider distinctions. Unfortunately, such a distinction is a feature of all 64-bit Windows systems.