Interesting. The problem is that the parser picks this up but when the expression is evaluated at the cursor, it does not check global preprocessing.
The following works:
typedef struct
{
unsigned short a;
unsigned short b;
unsigned short c;
} IO_Struct;
void main(int argc, char *argv[]) {
((IO_Struct *) whatever)->
}
but defining IO_Struct_Ptr to "((IO_Struct *) whatever)" doesn't work and then typing IO_Struct_Ptr-> does not work.
Even more interesting is that the following works WITHOUT defining global preprocessing.
#define MessageBox MessageBoxA
void MessageBoxA(int a,int b);
void main(int argc, char *argv[]) {
MessageBox(<Alt+Comma here>
}
I don't know if this limit is intentional or not. It seems to me that if no symbol is found (IO_Struct_Ptr wouldn't be found), fall through code could check for a #define symbol type in the tag file (or current file) which in this case would be found (no need for defining global preprocessing!!!).