Dlaczego for_each nie może zmodyfikować swojego argumentu funktora?

http://www.cplusplus.com/reference/algorithm/for_each/
Funkcja unarna pobierająca element z zakresu jako argument. Może to być wskaźnik do funkcji lub obiekt, którego klasa przeciąża operatora (). Jego wartość zwracana, jeśli istnieje, jest ignorowana.

Zgodnie z tym artykułem spodziewałem się, że for_each faktycznie modyfikuje podany obiekt jako trzeci argument, ale wygląda na to, że for_each działa na tymczasowym obiekcie i nawet nie modyfikuje podanego obiektu.

Dlaczego więc jest tak zaimplementowany? Wydaje się to znacznie mniej przydatne. A może źle coś zrozumiałem, a mój kod poniżej zawiera błędy?

#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;
}

Oczekiwany wynik:

1 2 3 Result: 6

Ale dostał następujące wyniki:

1 2 3 Result: 1

questionAnswers(3)

yourAnswerToTheQuestion