Сравните общие функции интеграции:
template <class F> double integrate(F integrand);
с
template <class F> double integrate(F& integrand);
или
template <class F> double integrate(const F& integrand);
Каковы плюсы и минусы каждой из них? STL использует первый подход (передача по значению), означает ли это, что он самый универсальный?