title: Using bind1st for a method that takes argument by reference
body: <p>I have a struct like this:</p>
  
  <pre><code>struct A {
      void i(int i) {}
      void s(string const &amp;s) {}
  };
  </code></pre>
  
  <p>Now when I try this: </p>
  
  <pre><code>bind1st(mem_fun(&amp;A::i), &amp;a)(0);
  bind1st(mem_fun(&amp;A::s), &amp;a)("");
  </code></pre>
  
  <p>The first line compiles OK, but the second generates an error:</p>
  
  <pre><code>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional(299): error C2535: 'void std::binder1st&lt;_Fn2&gt;::operator ()(const std::basic_string&lt;_Elem,_Traits,_Ax&gt; &amp;) const' : member function already defined or declared
            with
            [
                _Fn2=std::mem_fun1_t&lt;void,A,const std::string &amp;&gt;,
                _Elem=char,
                _Traits=std::char_traits&lt;char&gt;,
                _Ax=std::allocator&lt;char&gt;
            ]
            c:\program files (x86)\microsoft visual studio 10.0\vc\include\xfunctional(293) : see declaration of 'std::binder1st&lt;_Fn2&gt;::operator ()'
            with
            [
                _Fn2=std::mem_fun1_t&lt;void,A,const std::string &amp;&gt;
            ]
            c:\work\sources\exception\test\exception\main.cpp(33) : see reference to class template instantiation 'std::binder1st&lt;_Fn2&gt;' being compiled
            with
            [
                _Fn2=std::mem_fun1_t&lt;void,A,const std::string &amp;&gt;
            ]
  </code></pre>
  
  <p>What could be the problem? How could I fix it?</p>
  
  <p><strong>Edit:</strong></p>
  
  <p>It seems that any reference argument is a problem. So if I change the <code>i</code> method to <code>void i(int &amp;i) {}</code> I get a similar error.</p>