title: Ambiguous overload when using many typecasts operator overloads
body: <p>I want to create a wrapperClass for strings. I also want the class to be able to return the address of the wrapperClass and the address of the stored (wrapped) string:</p>
  
  <pre><code>void FunctionString(string*);
  void FunctionWrappedString(wrappedString*);
  
  int main(){
     wrappedString wrappedStringObject;
  
     FunctionString(&amp;wrappedStringObject);
     FunctionWrappedString(&amp;wrappedStringObject);
  
     wrappedString anotherWrappedStringObject;
  
     if(wrappedStringObject == anotherWrappedStringObject){
      // code
     }
  }
  </code></pre>
  
  <p>Here are the important parts of the class:</p>
  
  <pre><code>class wrappedString{
     typedef char* string;
  
     string storedString;
  
     operator string*(){
        // some code
        return &amp;storedString;
     }
  
     operator wrapperString*(){
        // some code
        return this;
     }
  
    operator string(){
      // some code
      return storedString;
    }
  </code></pre>
  
  <p>}</p>
  
  <p>However these fail when I use the comparison operator:</p>
  
  <pre><code>if(wrappedStringObject == anotherWrappedStringObject){
    // code
  }
  </code></pre>
  
  <p>Saying that the candidates are: operator==(string,string) and operator==(string*,string*)</p>