I assume, that this tells the compiler to evaluate the expression at compile time, i.e. the compiler knows at compile time, that you have a constant value of Option<Foo>::None in there and thus is doesn't need to to check any trait bounds on Foo, since it knows that Option<Foo>::Some(...) can never occur.
But a compiler specialist may give a more accurate answer than this.
Depending on your use case you may also want to have a look at MaybeUninit.
Edit: As to why the const block is needed, None as an expression itself can't be promoted to a constant as is; every expression that can be promoted needs to be behind a reference.
No, if anything the theme has been restricting const promotion further, now that there's const { … } to let you opt-in to the places where you want it.
A unit-like struct is a struct without any fields, defined by leaving off the list of fields entirely. Such a struct implicitly defines a constant of its type with the same name.