title: explicit call of templated overloaded operator
body: <p>i have a class with a overladed operators.
  </p>
  
  <pre><code>class sout {
  public:
    template&lt;typename T&gt;
    friend inline sout&amp; operator&amp;(sout&amp;, T&amp;);
  
    friend inline sout&amp; operator&amp;(sout&amp;, std::string&amp;);
  };
  </code></pre>
  
  <p>now if i use the templated operator&amp; inside the the sting.operator&amp; i get an error:</p>
  
  <p>code:</p>
  
  <pre><code>sout&amp; operator&amp;(sout&amp; s, std::string&amp; str) {
    uint16_t ts = static_cast&lt;uint16_t&gt;(str.size());  // this is ok
    s &amp; ts; // is also ok
  
    s &amp; static_cast&lt;uint16_t&gt;(str.size());  // but this is wrong
  
    // ...
    return s;
  }
  </code></pre>
  
  <p>error:</p>
  
  <pre><code>Error:C2679: binary '&amp;' : no operator found which takes a right-hand operand of type 'uint16_t' (or there is no acceptable conversion)
  could be 'sout &amp;operator &amp;&lt;uint16_t&gt;(sout &amp;,T &amp;)'
  with
  [
      T=uint16_t
  ]
  or       'sout &amp;operator &amp;(sout &amp;,std::string &amp;)'
  while trying to match the argument list '(sout, uint16_t)'
  </code></pre>
  
  <p>than i tried to use the explicite operator&amp; template-type by:</p>
  
  <pre><code>operator&amp;&lt;uint16_t&gt;(s, ts);  // this also ig ok
  </code></pre>
  
  <p>but if i combine it, i again a error:</p>
  
  <pre><code>operator&amp;&lt;uint16_t&gt;(s, static_cast&lt;uint16_t&gt;(str.size())
  </code></pre>
  
  <p>error:</p>
  
  <pre><code>'operator &amp;' : cannot convert parameter 2 from 'uint16_t' to 'uint16_t &amp;'
  </code></pre>
  
  <p>i also tried reinterpret_cast.</p>
  
  <p>i know operator&amp; is expecting a reference to uint16_t and the size() function is returning a size_t (int) not a reference. is it possible to do that in one line?</p>