@Kronos
No, I was expecting the compiler to assume (compile-time of course) that sizeof (*VarPtr) would be the same as sizeof (Var), simply because it's logic. This is assuming that Var is the variable VarPtr points to.
@neuroflip
"...why don't you call sizeof() using the expected type that pointer points to?"
Because the goal is to make a syntax for a macro as short as possible. If the compiler understood sizeof (*VarPtr) I could simply pass VarPtr to the macro and it would be able to use VarPtr and the size of Var from it. Since it doesn't I need to pass 2 arguments: VarPtr and sizeof (Var), or VarPtr and Var ( in wich case the macro would get sizeof (Var) internally).