title: C2975 invalid template argument for 'N', expected compile-time constant expression
body: <p>Here is a kind of code snippet which supposed to run on the version about 7.1 (VS 2003).</p>
  
  <p>I can not compile it on Visual Studio 2013.</p>
  
  <pre><code>.h header:
  
  template &lt;HINSTANCE h, DWORD hash, class N&gt;
  inline LPVOID testFunc(N n1)
  {   
      ...
      return ret_func(n1);
  }
  
  
  .cpp:
  
  HINSTANCE kernel32;
  
  int WINAPI WinMain(...)
  {
      ...
      kernel32 = GetKernel32();  
      HINSTANCE mod = testFunc&lt;kernel32, 0x0BADC0DE&gt;("some_string");  // C2975
      ...
  }
  </code></pre>
  
  <p>error C2975: 'h' : invalid template argument for 'testFunc', expected compile-time constant expression</p>
  
  <p>I tried like this:</p>
  
  <pre><code>HINSTANCE kernel32 = GetKernel32();  // implemented ok
  HINSTANCE mod = testFunc&lt;kernel32, 0x0BADC0DE&gt;("some_string");  // C2971
  </code></pre>
  
  <p>error C2971: 'pushargEx' : template parameter 'h' : 'kernel32' : a local variable cannot be used as a non-type argument</p>