Modify

Opened 5 months ago

Closed 5 months ago

#12745 closed Bugs (fixed)

key_nodeptr_comp broken if the key type is void*

Reported by: andysem Owned by: igaztanaga
Milestone: To Be Determined Component: intrusive
Version: Boost 1.63.0 Severity: Problem
Keywords: Cc:

Description

This is a regression since 1.60. boost::intrusive::set::insert_check() fails to compile if called with a key that has type void*. The error is as follows:

/home/lastique/src/boost-xcoder/boost/intrusive/detail/key_nodeptr_comp.hpp:87: error: no match for call to ‘(MediaBufferBase::callback_list::callback_reference::order_by_key) (const MediaBufferBase::callback_list::callback_reference&)’
    {  return base().get()(key_of_value()(*traits_->to_value_ptr(t1)));  }
              ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The problem is in key_nodeptr_comp implementation, which has an overload of operator() whith two formal parameters, the second one being used for enable_if_c and having the type void*. This operator calls user's ordering predicate with only one argument, which is naturally not expected.

The suggested solution is to use SFINAE on the return type of the operators or use a more distinct type for the hidden argument of the operators.

Attachments (0)

Change History (2)

comment:2 Changed 5 months ago by andysem

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

Add Comment

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain igaztanaga.
The resolution will be deleted. Next status will be 'reopened'.
Author


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

 
Note: See TracTickets for help on using tickets.