This is much easier and it works with (sufficiently recent versions of) GCC and Clang:
template<class... Args>
Visited(const Args&... args) : Visitors(args)... {}
using one argument per base class. If you want perfect forwarding for the arguments, use the slightly less concise:
template<class... Args>
Visited(Args&&... args) : Visitors(std::forward<Args>(args))... {}
In both cases, consider adding explicit
for the case that Visitors
is only a single class and you want to avoid accidental conversions.