Index: detail/pass_through_engine.hpp =================================================================== --- detail/pass_through_engine.hpp (revision 52074) +++ detail/pass_through_engine.hpp (working copy) @@ -32,10 +32,7 @@ typedef typename helper_type::value_type base_type; typedef typename base_type::result_type result_type; - explicit pass_through_engine(UniformRandomNumberGenerator rng) - // make argument an rvalue to avoid matching Generator& constructor - : _rng(static_cast(rng)) - { } + explicit pass_through_engine(UniformRandomNumberGenerator rng): _rng(rng) { } result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().min)(); } result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (base().max)(); } Index: mersenne_twister.hpp =================================================================== --- mersenne_twister.hpp (revision 52074) +++ mersenne_twister.hpp (working copy) @@ -28,6 +28,8 @@ #include #include #include +#include +#include namespace boost { namespace random { @@ -65,8 +67,9 @@ template mersenne_twister(It& first, It last) { seed(first,last); } template - explicit mersenne_twister(Generator & gen) { seed(gen); } + explicit mersenne_twister(Generator & gen, typename disable_if< is_same,int >::type = 0) { seed(gen); } + // compiler-generated copy ctor and assignment operator are fine void seed() { seed(UIntType(5489)); }