> Question here: Should we compare the d member here?

Indeed, it should be _just_: `return d != other.d;`. `this` and `&other` can be different, even if their actual data pointers are the same. i.e. your implementation would deem this code to return `false`:

~~~
bool foo( Reference& r ) {
    Reference r2 = r;
    return r == r2;
}
~~~