Hi Quin,
sorry, another idea I noted down some time ago which I would like to mention. > > > > - use it only in limited contexts where you do not need to know > > the type (e.g. this works for goto labels) or for a basic > > counted_by attribute that only takes an identifier as we have it now. A version of this is to allow taking the address of the member, but give it the type void*. The user can then convert it to the right type (and we could warn later if the cast goes to the wrong type). struct foo { int z; float f; } typedef struct counter_t[5][10]; struct bar { char *array __attribute__ ((counted_by ( (*(counter_t)&.y)[1][3].z + 4 ); struct foo y[5][10]; } This could also be used together with the function idea: struct bar { char *array __attribute__ (( counted_by ( bar_count(&.y) )); struct foo y[5][10]; } This would be simple to implement and do the job. Martin