title: conversion for void* as a method argument
body: <p>For a method with an argument of void* is C++ employing static/reinterpret_cast to make the conversion or is there a different mechanism in play here?</p>
  
  <pre><code>void foo(void* p)
  {
      // ... use p by casting it back to Base first, using static/reinterpret cast
  }
  Base* base(new Derived);
  foo(base);       // at this exact line, is there a static/reinterpret_cast going on under the covers?
  </code></pre>
  
  <p>I am asking because it seems that on one hand the standard says that for c-style cast, C++ will go and try a C++ cast (static, reinterpret, const) until something that works is found. However I can't find a reasonable explanation as to what goes on when a method with a void* argument is called. On the face of thing there is no cast, so what happens?</p>