title: Is "const LPVOID" equivalent to "void * const"?
body: <p>And if so, why some Win32 headers use it?</p>
  
  <p>For instance: </p>
  
  <pre><code>BOOL APIENTRY VerQueryValueA( const LPVOID pBlock,
      LPSTR lpSubBlock,
      LPVOID * lplpBuffer,
      PUINT puLen
      );
  </code></pre>
  
  <p>A bit more elaboration: If the API never uses references (or any other C++-only constructs) but only pointers and values, what is the point of having <code>const LPVOID</code> vs. <code>LPCVOID</code>.</p>
  
  <p>Should I treat every place I see <code>const LPVOID</code> as some place where the real meaning is <code>LPCVOID</code>? (and thus it is safe to add a cast)</p>
  
  <p>Further clarification: It appears that <code>const LPVOID pBlock</code> was indeed a mistake in this case. Windows 2008 SDK replaces it to <code>LPCVOID</code> in <code>VerQueryValue</code> signature. Wine did so quite some time ago.</p>