Final solution was removing catch all template:
template <EventId_e EventId, typename... Args>
static void Log(Args... args) {
LogMessage(static_cast<Args>(args)...);
}
And using this type of template for every ID:
template <EventId_e EventId, typename std::enable_if<EventId == EventId_e::EventId_OverVoltageWarning, int>::type = 0> void Log(uint16_t MaxCellVoltage, uint16_t MinCellVoltage, int16_t PeakCurrent) { LogMessage(MaxCellVoltage, MinCellVoltage, PeakCurrent); }