
Peter Dimov wrote:
Tobias Schwinger wrote:
This approach provides better integration. But we're back in boilerplate land (as you showed earlier in this thread).
Boilerplate compared to what? You have to keep in mind where we're coming from:
<snip code: good old exception class>
Switching to boost::exception actually removes most of the boilerplate code (at the expense of some memory allocations).
Actually I was comparing typedef boost::custom_exception< base,tag_a,tag_b /*...*/> my_exception; and class my_exception : base { public: my_exception(a_t const& a, b_t const& b /*...*/) { (*this) << boost::error_info<tag_a>(a) << boost::error_info<tag_b>(b) // ... } }; . Of course, both variants have the potential to remove quite a lot of boilerplate from traditional exception code.
The dynamic allocation problem can likely be addressed by adding an allocator argument to boost::exception.
Yes, but adding allocator support shouldn't be substitute for considering a more economic data structure (e.g. a single-linked list), IMO. Peter, is there any chance for you to find the time to write a full review? Regards, Tobias Schwinger - Review Manager -