|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2006-01-30 18:49:39
Cromwell Enage <sponage_at_[hidden]> writes:
> --- David Abrahams wrote:
>> I take it back; I'm pretty sure this has nothing to
>> do with forwarding. On what line of *your code*
>> does that error appear?
>
> The error appears on the line with the // error
> comment.
The actual error, and not just some line of the instantiation
backtrace? That makes no sense to me, because the functions generated
by BOOST_PARAMETER_FUN take their arguments by const&. The error
should appear wherever you try to bind a non-const reference to the
resulting const lvalue. Aha:
typedef typename boost::remove_const<
^^^^^^^^^^^^
typename boost::parameter::binding<
Params
, tag::rng_engine
>::type
>::type
RNGEngine;
...
RNGEngine rng_engine = p[example::rng_engine];
According to
http://www.boost.org/libs/parameter/doc/html/reference.html#binding,
binding<Params,Tag>::type is always a reference type. Since
remove_const<T&> is T&
when T is const (as it is in this case), you get a reference to
const. Thus RNGEngine is
boost::mt19937 const&
and the error should come here:
typedef boost::variate_generator<RNGEngine,RNGDist> RNG;
...
RNG rng(rng_engine, RNGDist(p[min], p[max]));
where variate_generator takes its first constructor argument by
mutable reference.
If my analysis is wrong, please explain how it is so.
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net