[util.smartptr.shared.atomic] p35 states that two shared pointers are equivalent if they store the same pointer value, and share ownership. As empty shared pointers never share ownership, it is not possible to replace an empty shared pointer using the atomic compare_exchange API.
Note that through aliasing, empty shared pointers may still point to different objects, and any resolution must allow for that case too.