title: no known conversion for templated vs const non-templated vector
body: <p>In my actual code, I included a library, and as soon as I did that, it started crashing. I managed to sort of extract some of that code into this minimal example, that demonstrates the same kind of error:</p>
  
  <pre class="lang-c++ prettyprint-override"><code>// g++ -std=c++11 -g -o test-classcall.exe test-classcall.cpp
  
  #include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;stdio.h&gt;
  
  class Cat
  {
    public:
      int Age;
      Cat() : Age(0) {}
  };
  
  std::vector&lt;Cat&gt; myPCats;
  
  typedef std::vector&lt;Cat&gt; TDVectCats;
  TDVectCats myTDCats;
  
  void loopSomeCats() {
    printf("this function just to cause searching for matching calls\n");
  }
  
  void loopSomeCats(TDVectCats&amp; incats) {
    std::vector&lt;Cat&gt;::iterator iter;
    for(iter = incats.begin(); iter != incats.end(); iter++) {
      printf("hm\n");
    }
  }
  
  const std::vector&lt;Cat&gt; &amp; getSomeCats() {
    return myPCats;
  }
  
  void doSomething() {
    loopSomeCats(getSomeCats());
  }
  
  int main() {
    myTDCats.push_back(Cat());
    myTDCats.push_back(Cat());
    myPCats.push_back(Cat());
  
    doSomething();
    std::cout &lt;&lt; "Hello World! " &lt;&lt; std::endl;
    return 0;
  }
  </code></pre>
  
  <p>The result is:</p>
  
  <pre class="lang-none prettyprint-override"><code>$ g++ -std=c++11 -g -o test-classcall.exe test-classcall.cpp
  test-classcall.cpp: In function ‘void doSomething()’:
  test-classcall.cpp:36:29: error: no matching function for call to ‘loopSomeCats(const std::vector&lt;Cat&gt;&amp;)’
     loopSomeCats(getSomeCats());
                               ^
  test-classcall.cpp:36:29: note: candidates are:
  test-classcall.cpp:20:6: note: void loopSomeCats()
   void loopSomeCats() {
        ^
  test-classcall.cpp:20:6: note:   candidate expects 0 arguments, 1 provided
  test-classcall.cpp:24:6: note: void loopSomeCats(TDVectCats&amp;)
   void loopSomeCats(TDVectCats&amp; incats) {
        ^
  test-classcall.cpp:24:6: note:   no known conversion for argument 1 from ‘const std::vector&lt;Cat&gt;’ to ‘TDVectCats&amp; {aka std::vector&lt;Cat&gt;&amp;}’
  </code></pre>
  
  <p>What especially confuses me, is the last "no known conversion for argument 1 from ‘const std::vector&lt;Cat>’ to ‘TDVectCats&amp; {aka std::vector&lt;Cat>&amp;}’", as if it cannot convert a vector of something, into the vector of the same something, just because of <code>typedef</code>? Or it maybe has to do with the <code>const</code> - but I simply cannot see what I need to change, in order to have a call like <code>loopSomeCats(getSomeCats());</code> succeed...</p>