Think of it this way, the compiler is not telling you that it is going to throw a null reference and therefore it can't compile, but rather that one of the conditions aren't met that are required to compile, i.e. that it has to be definitely assigned.
According to the spec null is a c# literal: "The null-literal can be implicitly converted to a reference type or nullable type"
As well as in terms of assignments: (taken from the spec)
Start of quote taken from the spec
5.3.3 Precise rules for determining definite assignment
In order to determine that each used variable is definitely assigned, the compiler must use a process that is equivalent to the one described in this section.
The compiler processes the body of each function member that has one or more initially unassigned variables. For each initially unassigned variable v, the compiler determines a definite assignment state for v at each of the following points in the function member:
· At the beginning of each statement
· At the end point (§8.1) of each statement
· On each arc which transfers control to another statement or to the end point of a statement
· At the beginning of each expression
· At the end of each expression
End of quote
So even though null is not actually pointing to an object in memory, it does fulfill the requirements of being definitely assigned and that is why the compiler allows it.