ValueObject inherits from UserID which is just a bad idea:
- The inheritance gives ValueObject some member functions that are at best misleading (such as Clear() which doesn't clear any value beside id).
- It allows passing ValueObject to the overloaded operators for UserID (such as == or << which won't actually compare or print anything in the ValueObject).
- It exposes the SetID and Clear which both allow users to change the internal id value.
Similar to D91699 which did the same for Process