better x3::variant interface