Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-03-08 12:48:04


Hi,

I have this code that isn't compiling because of the "forwarding
problem" limitation of boost::bind:

        std::for_each(
            make_difference_iterator(p->second.begin())
          , make_difference_iterator(p->second.end())
          , boost::bind(&fu::writeVInt, &prox, _1));

The problem is that an implicit conversion is required between the
reference type of the difference_iterator and the argument type of
writeVInt.

It seems to me that, since I know that binding to an rvalue is
required, we ought to have a way to say "force this to be a const
ref". I thought of something like

        std::for_each(
            make_difference_iterator(p->second.begin())
          , make_difference_iterator(p->second.end())
          , boost::bind(&fu::writeVInt, &prox, boost::cref(_1)));
                                               ^^^^^^^^^^^^ ^

I know it's not pretty, but it sorta does what we want. Thoughts?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk