The most immediate answer to your question is, I believe, tinyformat, which only aims to provide a typesafe
printf() replacement and is in-use. I would not recommend you choose that one, though.
You would probably be better served by fmt, which has a wider scope but does more, has seen more development and is in wider use (there's also the older FastFormat). As you'll see at the links, they won't fail you like
If you want the most bare-bones do-it-yourself thing possible, there's a variadic-template-based safe
printf() implementation idea by C++ luminary Andrei Alexandrescu from 20120 - see this StackOverflow.com answer for details.
A final note outside the scope of OP's specific scenario: With C++17 it has becomes sort-of-possible to go even beyond all of these options and use
constexpr format-string constants to do the verification completely at compile time rather than runtime, which would be awesome (assuming, of course, you know your format beforehand). Nothing like that has been released as of right now (that I know of).