Visitor is the only way I know of dealing with it in C++. Once you do it enough, Visitor starts to feel like a pretty natural way to extend a class without modifying the class.
Are you talking about traditonal OOP visitor pattern ? It's pretty terrible, when compared to std::variant ; imagine for instance that you want to have a way to draw the rect that contains a given shape without changing your shape class: https://godbolt.org/g/34KyMw
Visitor is nice when some kind of transformation needs to be applied to the visited objects.
https://www.reddit.com/r/ProgrammingLanguages/comments/7w3oe...
The top comment supported the use of the visitor pattern, but I would say that MOST people in the thread did NOT use visitors.
You only really need a visitor if you have more than one traversal. And even then you don't necessarily need it.