Pointers are more powerful than references in the sense that they allow two things that references don’t: nullability and rebinding.
Referencescannot be null and cannot rebind
std::reference_wrappercannot be null but can rebind
Pointerscan be null and can rebind (and can do low-level address manipulations)
boost optional referencescan be null and can rebind (but are incompatible with std::optional)