typedef struct asub{
int a;
} Asub;
typedef struct bsub{
Asub* ptr;
} Bsub;
#define indirect(this) _indirect((this))
void _indirect(Asub* this){
}
void main(){
Bsub* this;
Asub* nptr = this->ptr;
indirect(nptr); // ok
_indirect(this->ptr); // ok
_indirect((this->ptr)); // ok
indirect(this->ptr); // fails
}