Comportamento da restrição de tipo F # "não gerenciado"

O F # suporta uma restrição de tipo para "não gerenciado". Isso não é o mesmo que uma restrição de tipo de valor como restrições "struct".Notas do MSDN que o comportamento da restrição não gerenciada é:

O tipo fornecido deve ser um tipo não gerenciado. Tipos não gerenciados são certos tipos primitivos (sbyte, byte, char, nativeint, unativeint, float32, float, int16, uint16, int32, uint32, int64, uint64 ou decimal), tipos de enumeração, nativeptr <_> ou um não- estrutura genérica cujos campos são todos tipos não gerenciados.

Esse é um tipo de restrição muito útil ao fazer a invocação de plataforma, e mais de uma vez eu gostaria que o C # tivesse uma maneira de fazer isso. C # não tem essa restrição. O C # não suporta todas as restrições quepode ser especificado em CIL. Um exemplo disso é uma enumeração. Em C #, você não pode fazer isso:

public void Foo<T>(T bar) where T:enum

No entanto, o compilador C # honra a restrição "enum" se ela se deparar com outra biblioteca. Jon Skeet é capaz de usar isso para criar suaMelodia sem restrições projeto.

Portanto, minha pergunta é: a restrição "não gerenciada" do F # é algo que pode ser representado no CIL, como uma restrição de enum e simplesmente não exposta no C #, ou é imposta apenas pelo compilador do F #, como algumas das outras restrições que o F # suporta (como Restrição explícita de membro)?

questionAnswers(3)

yourAnswerToTheQuestion