Modify

Opened 7 years ago

Last modified 7 years ago

#4359 new Bugs

boost bind doesn't work with inherited structures

Reported by: jia3ep@… Owned by: Peter Dimov
Milestone: Boost 1.44.0 Component: bind
Version: Boost 1.44.0 Severity: Problem
Keywords: Cc:

Description

The following code gives an error in VC++2008, VC++2010, g++ 4.2.4:

#include <boost/bind.hpp>

struct Y {
	void reset() {};	
};

template<typename T1, typename T2>
struct my_pair {
	T1 first;
	T2 second;
};

template<typename T1, typename T2>
struct my_pair2 : my_pair<T1, T2> {};

typedef my_pair<int, Y> mypair_t;
typedef my_pair2<int, Y> mypair2_t;

int main()
{
	mypair_t t1;
	mypair2_t t2;

	boost::bind<Y&>( &mypair_t::second, _1 )( t1 ).reset();  // OK!
	boost::bind<Y&>( &mypair2_t::second, _1 )( t2 ).reset(); // error: cannot convert from 'const Y' to 'Y &'

	return 0;
}

Attachments (0)

Change History (1)

comment:1 Changed 7 years ago by Steven Watanabe

This is a result of mem_fn's logic for handling get_pointer. I'm somewhat hesitant to touch this, as it's rather easy to break older compilers.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as new The owner will remain Peter Dimov.

Add Comment


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

 
Note: See TracTickets for help on using tickets.