Speaking of nits, how about this: typedef int x; void f () { extern int x; x = 5; } Is the second declaration of "x" legal? If it is, what linkage does "x" have? 3.1.2.2 would suggest that the second declaration "has the same linkage as any visible declaration of the identifier with file scope" -- i.e. none? ++sja