typedef, define and type tags work differently