>>978
前半部分について
result_type variate_generator::operator()() { return _dist(_eng); }
↓
//some pseudo code
result_type operator()(variate_generator * const this) { return _dist(_eng); } //�@

一方、
double nrv::val() const {
return rv();
}
↓
//some pseudo code
double val(const nrv * const this) {
return (this->rv)();
}
↓
double val(const nrv * const this) {
return (this->rv).variate_generator::operator()();
}
↓
double val(const nrv * const this) {
return operator()(&(this->rv)); //�@の呼び出し
}

&(this->rv)の型は少なくともconst variate_generator *だが、�@のパラメータは
variate_generator *であり、variate_generator *をconst variate_generator *
では初期化できない。