https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92679
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- Or simply: template <typename TArg, typename F> void accept(F f) { functions[std::type_index(typeid(TArg))] = [f](std::any &x) -> TReturn { return f(std::any_cast<TArg &>(x)); }; }