I agree that the type should be shared(int), but the type should not transfer to function calls or auto, it should be sticky to the particular variable.
I think that's a pretty fundamental problem:Shared is a type constructor, but you just mentioned that it has to be a property of the _variable_, i.e. a storage class.
Just thought I'd throw that out there.