
Cromwell Enage <sponage@yahoo.com> 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