dht::token needs to be stored as a pointer now and not a reference so that validity of old pointers is not impacted by in-place object construction which would occur in the copy-assignment operator. [1] says that old pointers can be used to access the new object only if the type "does not contain any non-static data member whose type is const-qualified or a reference type". [1] http://en.cppreference.com/w/cpp/language/lifetime#Storage_reuse