 <p>Expanding parameter packs into varargs is valid.</p> <p>And there is no harm in forwarding when you want to forward. But taking by <code>const&amp;</code> also communicates something useful.</p> <p>The values passed to <code>...</code> will experience "default argument promotions". See <a href="http://en.cppreference.com/w/cpp/language/variadic_arguments">http://en.cppreference.com/w/cpp/language/variadic_arguments</a></p> <p>None of these care about references.</p> <p>You can improve your code. You can check that the <code>Ts...</code> are valid types to pass to the printing routine, both by "kind of type" and by actually parsing the formatting string and confirming number (and sometimes type) of arguments. If this fails, you can log an error message instead of crashing.</p>