Używanie std :: bind2nd z odwołaniami

Mam prostą klasę taką jak ta:

class A
{
public:
    void f(const int& n)
    {
        std::cout<<"A::f()" << n <<"\n";
    }
};

i próbuję użyć tego w ten sposób:

std::vector<A> vec;
A a;
vec.push_back(a);
std::for_each(vec.begin(), vec.end(), std::bind2nd(std::mem_fun_ref(&A::f), 9));

Ale kiedy kompiluję kod, otrzymuję następujący błąd gdzieś w funkcjonalnym pliku nagłówkowym:

błąd C2529: „_Right”: odwołanie do odniesienia jest nielegalne

Jeśli usunę odniesienie w parametrze f (), kompiluje się dobrze. Jak to rozwiązać? Nie chcę usuwać odniesienia, ponieważ w moim prawdziwym kodzie kopiowanie obiektu jest dość kosztowne. Nie używam też boostu.

questionAnswers(4)

yourAnswerToTheQuestion