id:kikx:20061106
の続き

short x = 1;
unsigned char y = 1;
issigned(x) ==> 1
issigned(y) ==> 0

みたいに左辺値だったら、

int issigned_data = -1;
#define issigned_char(x) ((&x)[(int)&issigned_data-(int)&x] < 0)
#define issigned(x) (sizeof(x)==sizeof(char)? issigned_char(x): ...)

とかやって、左辺値をポインタにして、-1が詰まってるとこまで平行移動して、読んでやればテンポラリに保存しなくてもできるんだよな。