+1  A: 

guys, I just found the answer, like following:

boost::function< void()> func(
        boost::bind( DataConsumer, 
                     boost::bind( boost::addressof< A >, boost::bind< A& >( DataSource ) )
                    )            );

The theory should be: since we call DataSource later, we need a functor that uses the return value later as well.

JQ
That's clear! ;-)
DannyT
If you can adjust Consumer to take a reference…
Potatoswatter