title: c++ error: operator []: 2 overloads have similar conversions
body: <pre><code>template &lt;typename T&gt;
  class v3 {
  private:
      T _a[3];
  
  public:
      T &amp; operator [] (unsigned int i) { return _a[i]; }
      const T &amp; operator [] (unsigned int i) const { return _a[i]; }
  
      operator T * () { return _a; }
      operator const T * () const { return _a; }
  
      v3() {
          _a[0] = 0; // works
          _a[1] = 0;
          _a[2] = 0;
      }
  
      v3(const v3&lt;T&gt; &amp; v) {
          _a[0] = v[0]; // Error  1   error C2666: 'v3&lt;T&gt;::operator []' : 2 overloads have similar conversions
          _a[1] = v[1]; // Error  2   error C2666: 'v3&lt;T&gt;::operator []' : 2 overloads have similar conversions
          _a[2] = v[2]; // Error  3   error C2666: 'v3&lt;T&gt;::operator []' : 2 overloads have similar conversions
      }
  };
  
  int main(int argc, char ** argv)
  {
      v3&lt;float&gt; v1;
      v3&lt;float&gt; v2(v1);
  
      return 0;
  }
  </code></pre>