I wouldn't say *ptr is a reference; *ptr is an object. You create the reference through something else, say:
void foo(int &i);
So i is the reference, not *ptr strictly. What makes it confusing in the case of overloaded ops, is that this happens behind the scenes.