The visitor pattern is a classical OOP pattern. It is used to solve the problem where you frequently want to add virtual functions to a class hierarchy, but rarely want to add new classes. However, it isn't particularly nice to use and doesn't fit the inheritance less trend of C++. So can we make it more modern and nicer to use?