Come funzionano gli operatori di conversione in C ++?

Considera questo semplice esempio:

template  class smartref { public: smartref() : data(new Type) { } operator Type&(){ return *data; } private: Type* data; }; class person { public: void think() { std::cout << "I am thinking"; } }; int main() { smartref p; p.think(); // why does not the compiler try substituting Type&? } 

Come funzionano gli operatori di conversione in C ++? (es.) quando il compilatore prova a sostituire il tipo definito dopo l’operatore di conversione?