title: C++ why overloading (T&) in template with (T*)
body: <p>in C++, if a method is accepting <strong>left reference + pointer</strong> only, </p>
  
  <p>it seems it suffices if we only have a template method with T&amp; as its parameter, why we usually overload with <code>test(T* )</code> as well ?</p>
  
  <p>proof of concept: left reference method can take pointer argument.</p>
  
  <pre><code>#include &lt;iostream&gt;
  using namespace std;
  
  template&lt;class T&gt;
  void test(T&amp; arg) {
    T value = arg;
    cout &lt;&lt; *value &lt;&lt; endl;
  }
  
  int main() {
      int b = 4;
      int* a = &amp;b;
      test(a); // compiles and runs without issue.
      return 0;
  }
  </code></pre>