Hi, Am 03.01.2017 15:23, schrieb Olaf van der Spek:
On Tue, Jan 3, 2017 at 3:16 PM, Christof Donat
wrote: The extra parentheses and the .str() part are annoying.. same goes for boost::format.
I see. For me that is not a big issue, but people are different.
How about this one?
throw std::runtime_error("Error "s << 47);
Uh. How does that work with std::cout << "Error "s << 47; Will that be (std::cout << "Error "s) << 47; or std::cout << ("Error "s << 47); Also I'd expect a std::string to behave like a stream then and try to use e.g. manipulators. Maybe that would be acceptable with a different operator. e.g. like in SQL: throw std::runtime_error("Error "s || 47); Now this is explicit: std::cout << "Error "s || 47; // versus std::cout << "Error "s << 47; But then again this might behave surprisingly: throw std::runtime_error("Error "s || 47 || 11); I still don't feel comfortable with it.
If performance matters, I'd try with boost::spirit::karma. The syntax will
Performance matters but it's not the only thing that matters. What solution do you think someone new to C++ understands better?
I think, mixing the notion of strings and streams, but not for e.g. manipulators would confuse people a lot. I am a big fan of overloading operators and expression templates, wherever they improve the expression of intent. In this particular case my gut feeling tells me, that it will harm the expression of intent more often, than it will improve. Christof