Declaring a variable as __weak__ ought to imply that the type includes zero.
Consider
class Foo(__weak__ object bar){}
If the gc zaps bar, it will be set to 0, so either the compiler should complain and/or it should add zero to the type implicitly.