Por que o for_each não pode modificar seu argumento functor?

http://www.cplusplus.com/reference/algorithm/for_each/
Função unária usando um elemento no intervalo como argumento. Isso pode ser um ponteiro para uma função ou um objeto cuja classe sobrecarrega operator (). Seu valor de retorno, se houver, é ignorado.

De acordo com este artigo, eu esperava que o for_each realmente modificasse o objeto fornecido como seu terceiro argumento, mas parece que o for_each opera em um objeto temporário e nem sequer modifica o objeto fornecido.

Então, por que é implementado dessa maneira? Parece muito menos útil. Ou entendi algo errado e meu código abaixo contém erros?

#include <iostream>
#include <vector>
#include <algorithm>

template <class T> struct Multiplicator{
    T mresult;
  public:
    const T& result() const{return mresult;}
    Multiplicator(T init_result = 1){
      mresult = init_result;
    }
    void operator()(T element){
      mresult *= element;
      std::cout << element << " "; // debug print
    }
};

int main()
{
    std::vector<double> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    Multiplicator<double> multiply;
    std::for_each(vec.begin(),vec.end(),multiply);
    std::cout << "\nResult: " << multiply.result() << std::endl;
    return 0;
}

Saída esperada:

1 2 3 Result: 6

Mas tenho a seguinte saída:

1 2 3 Result: 1

questionAnswers(3)

yourAnswerToTheQuestion