title: Comparing a generic against null that could be a value or reference type?
body: <pre><code>public void DoFoo&lt;T&gt;(T foo) where T : ISomeInterface&lt;T&gt;
  {
      //possible compare of value type with 'null'.
      if (foo == null) throw new ArgumentNullException("foo");
  }
  </code></pre>
  
  <p>I'm purposely only checking against null because I don't want to restrict a <code>ValueType</code> from being equal to its <code>default(T)</code>. My code compiles and works just fine this way (ReSharper complains, but not CodeAnalysis). Though I do wonder:</p>
  
  <ul>
  <li>Is there a more <i>standard</i> way to handle this situation?</li>
  <li>Is there any chance of an issue arrising from this?</li>
  <li>What truly happens under the hood when I make a call and pass in a value type?</li>
  </ul>