Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#6374 closed Bugs (fixed)

operator << for exception doesn't work with 0/1 length tuples

Reported by: edA-qa mort-ora-y <edA-qa@…> 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)

boost_exception_tuple.cc (1.6 KB ) - added by edA-qa mort-ora-y <edA-qa@…> 11 years ago.
repoduction and workaround

Download all attachments as: .zip

Change History (4)

by edA-qa mort-ora-y <edA-qa@…>, 11 years ago

Attachment: boost_exception_tuple.cc added

repoduction and workaround

comment:1 by edA-qa mort-ora-y <edA-qa@…>, 11 years ago

I'm using: gcc (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2)

comment:2 by Emil Dotchevski, 11 years ago

Resolution: fixed
Status: newclosed

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 edA-qa mort-ora-y <edA-qa@…>, 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?

Note: See TracTickets for help on using tickets.