This is awesome. Joe Duffy reveals what I had suspected. A change to the CLR that will fix the issues I've previously discussed about nullable types in version 2.0! From his blog:
The core of this change is that the IL box instruction has been modified to recognize Nullable<T>s. For non-Nullables, behavior remains the same; but upon seeing one, it inspects its HasValue property. If HasValue is true, box peeks inside the structure, extracts the T value, and boxes that instead; otherwise, box simply leaves behind a null reference. Obviously, unbox has also been changed to allow nulls to be unboxed back into Nullable<T> structures. This had a rippling effect in the CLR codebase and also required changes to late-bound semantics to mimic the static case.
This is fantastic, and reveals just how strong Microsoft's commitment is to the development community. I gave my feedback on this before. I felt it was a problem that aware developers could understand and live with, but I felt that novice developers would struggle with it, and ultimately it would make the feature, and the platform less understandable and approachable.
As you can tell from my earlier post, I had pretty much decided that MS would be unable to fix it at this late stage in the game, and that would be a shame. But, thanks to some good decision making, they've done it. Also, the solution was quite similar to my suggestion, I'm happy to say.
Be sure to follow through and read Somasegar's post on the subject.