Por que o compilador não detecta a assinatura correta da função com err

A pergunta está em referência aist, publicado um pouco ante
nquanto o OP estava feliz em aceitar a resposta que resolveu seu problema, fiquei um pouco intrigado com um detalhe sobre o motivo pelo qual o compilador deu um erro aparentemente errad

Abaixo é um pequeno exemplo de código que criei para demonstrar o mesmo:

    class YourClass
    {
    };

    class YourClass2
    {
    };
    class MyClass
    {
        public:
            void doSomething(YourClass2 obj)
            {
                //Nothing more Interesting to do
            }

    };

    int main()
    {
        YourClass *ptr = new YourClass();
        MyClass obj;
        obj.doSomething(ptr);

        return 0;
    }

Compilingist comGCC (4.3.4) fornece um resultado de erro aparentemente estranho:

prog.cpp: In function ‘int main()’:
prog.cpp:23: error: no matching function for call to ‘MyClass::doSomething(YourClass*&)’
prog.cpp:13: note: candidates are: void MyClass::doSomething(YourClass2)

Então a pergunta é:
Por que o compilador trata a chamada,

obj.doSomething(ptr);

como chamar uma função com protótipo,

MyClass::doSomething(YourClass*&)

e nã

MyClass::doSomething(YourClass*)

que parece ser o caso óbvio.

questionAnswers(4)

yourAnswerToTheQuestion