template<typename T>
struct EventHandler {
    void pushEvent(T& ) {}
};

template<typename... EventHandlers>
struct _EventsHandler;

template<typename EventHandler>
struct _EventsHandler<EventHandler> : EventHandler
{
    using EventHandler::pushEvent;
};

template<typename EventHandler, typename... EventHandlers>
struct _EventsHandler<EventHandler, EventHandlers...> : EventHandler, _EventsHandler<EventHandlers...>
{
    using EventHandler::pushEvent;
    using _EventsHandler<EventHandlers...>::pushEvent;
};

using EventHandlerType = _EventsHandler<EventHandler<int>, EventHandler<float>, EventHandler<char>>;

int main()
{
    EventHandlerType test;

    int msp = 1;
    test.pushEvent(msp);

    return 0;
}
