I greatly prefer tag classes for this. You can define 'em in a single line and a downstream user can't accidentally plug the unset value in to the template.
You could say the same thing about std::monostate, which is not a dummy type. If you need a unique sentinel type you have to make one for that purpose.