<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Oct 11, 2016 at 8:59 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">5. <b class="gmail_msg">Not flexible.</b>  How do you print a std::chrono::time_point with llvm::format()?  You can't.  You have to resort to providing an overloaded streaming operator or formatting it some other way.</div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">It seems to me that there is no silver bullet for that: being for llvm::format() or your new proposal, there is some sort of glue/helpers that need to be provided for each and every non-standard type.</div></div></div></div></blockquote><div><br></div><div>I only half agree with this.  for llvm::format() there is no glue or helpers that can fit into the existing model.  It's a wrapper around snprintf, so you get what snprintf gives you.   You can go *around* llvm::format() and overload an operator to print your std::chrono::time_point, but there's no way to integrate it into llvm::format.  So with my proposed library you could write:</div><div><br></div><div>os << format_string("Start: {0}, End: {1}, Elapsed: {2:ms}", start, end, start-end);</div><div><br></div><div>Or you could write:</div><div><br></div><div>os << "Start: " << format_time_point(start) << ", End: " << format_time_point(end) << ", Elapsed: " << std::chrono::duration_cast<std::chrono::millis>(start-end).count();</div></div></div>