Ticket #6374 (closed Bugs: fixed)

Opened 5 years ago

Last modified 5 years ago

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

Reported by: edA-qa mort-ora-y <edA-qa@…> Owned by: emildotchevski
Milestone: To Be Determined Component: exception
Version: Boost 1.46.1 Severity: Problem
Keywords: Cc:


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.6 KB) - added by edA-qa mort-ora-y <edA-qa@…> 5 years ago.
repoduction and workaround

Change History

Changed 5 years ago by edA-qa mort-ora-y <edA-qa@…>

repoduction and workaround

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

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

comment:2 Changed 5 years ago by emildotchevski

  • Status changed from new to closed
  • Resolution set to fixed

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 Changed 5 years ago by edA-qa mort-ora-y <edA-qa@…>

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?


Add a comment

Modify Ticket

Change Properties
<Author field>
as closed
The resolution will be deleted. Next status will be 'reopened'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.