|
Boost : |
Subject: [boost] Boost.Bind and boost.ref propagation
From: Felipe Magno de Almeida (felipe.m.almeida_at_[hidden])
Date: 2011-01-07 15:54:40
Hi,
Why this code asserts?
struct foo
{
typedef void result_type;
template <typename T>
void operator()(T obj) const
{
BOOST_MPL_ASSERT
((boost::mpl::or_
<
typename boost::mpl::not_
<
typename boost::is_same<typename
boost::unwrap_reference<T>::type, T>::type
>::type
, typename boost::is_reference<T>::type
>));
}
};
int main()
{
int i = 0;
boost::bind(::foo(), boost::ref(i))();
}
I would expect the T type to be boost::reference_wrapper<int>, but it
is actually int.
It is not int& as well.
How do I get to propagate the boost::reference_wrapper through boost.bind to a
template?
I don't want to use T& for the parameter, because the algorithm accepts
objects-by-value correctly, but I would like to be able to use boost.bind
as I would call this algorithm with boost.ref for some data-types.
foo()(boost::ref(i)); // Calls with boost::reference_wrapper<int>
Thanks in advance,
-- Felipe Magno de Almeida
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk