The minor problem is that a typedef pointer breaks this pattern:
typedef foo * FooP; FooP a, b; // Both are pointers