These methods are needed for use with Diagnostic::operator<< etc.
The definitions follow the pattern of Diagnostic::str by simply wrapping the underlying print(raw_ostream) method. Although there is some overhead for constructing the std::string, this seems like the overall most-efficient option: since this overhead only occurs on the error path (under the current intended usage). An alternative approach would be to have one method construct a Twine directly, and then have the print method pass the twine to the stream; however, that would mean introducing the overhead of twine construction on the common/happy path of simply printing things out.