Pasar a un argumento de referencia por valor

Considere este sencillo programa:

vector<int> foo = {0, 42, 0, 42, 0, 42};
replace(begin(foo), end(foo), foo.front(), 13);

for(const auto& i : foo) cout << i << '\t';

Cuando lo escribí esperaba:

13 42 13 42 13 42

Pero en cambio obtuve:

13 42 0 42 0 42

El problema, por supuesto, es quereplace toma los 2 últimos parámetros por referencia. Entonces, si alguno de ellos está en el rango que se está operando, los resultados pueden ser inesperados. yopuede resuelva esto agregando una variable temporal:

vector<int> foo = {0, 42, 0, 42, 0, 42};
const auto temp = foo.front();
replace(begin(foo), end(foo), temp, 13);

for(const auto& i : foo) cout << i << '\t';

Sé que C ++ 11 nos dio todo tipo de herramientas de tipo. ¿Es posible que simplemente pueda forzar este valor a un tipo sin referencia y pasarlo en línea, sin crear el temporal?

Respuestas a la pregunta(7)

Su respuesta a la pregunta