Это поведение std :: ref логично?

Рассмотрим этот код:

#include <iostream>
#include <functional>

int xx = 7;

template<class T>
void f1(T arg)
{
    arg += xx;
}

template<class T>
void f2(T arg)
{
    arg = xx;
}

int main()
{
    int j;

    j=100;
    f1(std::ref(j));
    std::cout << j << std::endl;

    j=100;
    f2(std::ref(j));
    std::cout << j << std::endl;
}

При выполнении этот код выводит

107
100

Я бы ожидал, что второе значение будет 7, а не 100.

Чего мне не хватает?

Ответы на вопрос(3)

Ваш ответ на вопрос