Рассмотрим этот простой пример:
template <class Type>
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<person> p;
p.think(); // why does not the compiler try substituting Type&?
}
Как работают операторы преобразования на С++? (i.e), когда компилятор пытается подставить тип, определенный после оператора преобразования?