#6374 closed Bugs (fixed)
operator << for exception doesn't work with 0/1 length tuples
Reported by: | Owned by: | Emil Dotchevski | |
---|---|---|---|
Milestone: | To Be Determined | Component: | exception |
Version: | Boost 1.46.1 | Severity: | Problem |
Keywords: | Cc: |
Description
The operator<< for boost exception allows attaching error_info structures. As a convenience it also takes a tuple form of those info structures. This tuple form does not work if the tuple is empty (0-length) or also if it is 1-length.
This is a compile-time matching issue.
The attached code shows the compile error (reduced to the essentials). It also includes the workaround which I am currently using (compile with WORKAROUND defined). Ideally the non-workaround version should work.
NOTE: This doesn't appear related to the macro itself. If you simple instantiate the exception and error_info tuple and use the operator directly the same compile-time error occurs. I've left the MACRO form to show the intent.
Attachments (1)
Change History (4)
by , 11 years ago
Attachment: | boost_exception_tuple.cc added |
---|
comment:2 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed in trunk revision 76403, however I would suggest not using boost::tuple for this purpose, it might be better to instead unroll the ... in your macro into separate operator << calls.
comment:3 by , 11 years ago
Why do you suggest that I don't use it for this purpose? Is it not efficient -- I'm expecting in optimized build the tuple stuff just disappears.
I'd be happy to just unroll the ... but I'm not aware of any language feature that would let me unroll it. Is it possible with BOOST's preprocessor library?
repoduction and workaround