Opened 7 years ago

Last modified 7 years ago

#11702 new Bugs

boost::bind universal reference handling regression

Reported by: maxim.yegorushkin@… Owned by: Peter Dimov
Milestone: To Be Determined Component: bind
Version: Boost 1.59.0 Severity: Regression
Keywords: bind, auto_ptr Cc:

Description

The following code compiles with boost-1.57 but not with boost-1.59:

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <memory>

void foo(std::auto_ptr<int>);

int main() {
    boost::function<void(std::auto_ptr<int>)> f = boost::bind(foo, _1);
    std::auto_ptr<int> p;
    f(p);
}

This is due to the new universal reference handling code implemented in boost::bind.

The local fix we use is:

#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )

namespace boost { namespace _bi {

template<class A> struct list_add_cref<std::auto_ptr<A> >
{
    typedef std::auto_ptr<A>& type;
};

} }

#endif

Change History (1)

Note: See TracTickets for help on using tickets.