The problem is that operator&() and operator&.field() shouldn't be generated for these types.
2 possible ways we can do this:
A) The compiler just magically knows that these types are special. They are identified by (name, the fact that they come from the standard library).
B) New syntax in the standard library. Something like
float operator&.field(thread float4*) = delete;
Option 3: Just keep them implemented as native types.
*** Bug 188688 has been marked as a duplicate of this bug. ***
Migrated to https://github.com/gpuweb/WHLSL/issues/88