Consider the code:
decompile <@ typeof<int> @> // correct: "typeof<int>"
decompile <@ Unchecked.defaultof<int> @> // wrong: "Unchecked.defaultof"
and
type Foo<'T>() = class end
decompile <@ new Foo<int>() @> // correct: "new Bar<int>()"
type Bar =
static member Bar<'T>() = Unchecked.defaultof<'T>
decompile <@ Bar.Bar<int> () @> // wrong: "Bar.Bar()"