<...>
Jon Kalb raised this issue at BoostCon. My knee-jerk reaction was that it makes sense to alter the specification of operator<< so it never throws, but now my opinion is that it isn't a good idea.
Well, in my original post I didn't mean just the inner workings of operator<<. By the time operator<< is invoked, the temporary object of std::string (or other type for that matter) will have to be constructed. That means, that the exception may be thrown before getting into operator<< Unfortunately, it seems that using '<<' syntax it will be impossible to catch exceptions. I hate macros as much as the next guy, but it looks like this sort of problem is solvable only using macros.
Consider this slightly modified example:
std::string get_descr();
.... throw f1exception() << f1_descr(get_descr());
Even if operator<< and f1_descr's constructor never throw, in theory you could still get std::bad_alloc instead of f1exception.
Exactly! That's what I meant in my original post.
Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode
Regards, Andy.