Por que não posso usar System.ValueType como uma restrição genérica?

Por que não posso usar uma restrição dewhere T : System.ValueType?Por que a Microsoft impede que esse tipo seja uma restrição?

Exemplo:

Por que não posso fazer o seguinte?

// Defined in a .Net class
public void bar<T>(T a) where T : ValueType {...}

// Defined in my class
public void foo<T>(T a) where T : ValueType 
{ bar<T>(a); }

Qual é a diferença no uso de struct sobre ValueType?

// Defined in my class
public void foo<T>(T a) where T : struct 
{ bar<T>(a); }

questionAnswers(3)

yourAnswerToTheQuestion