As I know C++ now allows multiple dispatch for std::variant: https://en.cppreference.com/w/cpp/utility/variant/visit2.htm....
And std::variant is now a better choice for cases like in the article above, where previously inheritance was used to represent a closed set of possible subtypes.
Where "now" means C++17 or C++20 depending on whether or not you understand what INVOKE<R> semantics are?
TIL that std::visit supports multiple variants. How new is that ?
Always did, as far as I know. Never knew why...