The codebase has twelve overloads of makeLogLine: two args, three, four... The author stopped at seven because 'nobody will ever need more'. Somebody needed more. Instead of overload thirteen, write one variadic template: a fold expression joins anything.
Implement joinWith(sep, args...) — join any number of streamable values of mixed types into one string with sep between them: joinWith("-", 2026, "jun", 10) → "2026-jun-10". Use a variadic template with a C++17 fold expression — no recursion, no overload chain.
typename... Ts), single implementationoperator<<)((out << …), ...) expand to for three arguments?+?Stream into an std::ostringstream and fold over the comma operator: ((out << … << args), ...).
Track the position with a counter captured outside the fold: std::size_t i = 0; ((out << (i++ ? sep.c_str() : "") << args), ...);.
Hit Submit (or ⌘/Ctrl + ↵) — test results will show up here.