Passando para um argumento de referência por valor
Considere este programa simples:
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';
Quando escrevi, esperava obter:
13 42 13 42 13 42
Mas, em vez disso, obtive:
13 42 0 42 0 42
O problema, claro, é quereplace
leva os últimos 2 parâmetros por referência. Portanto, se algum deles estiver na faixa sendo operada, os resultados poderão ser inesperados. Eupode resolva isso adicionando uma variável temporária:
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';
Eu sei que o C ++ 11 nos deu todos os tipos de ferramentas de tipo. É possível que eu possa simplesmente forçar esse valor a um tipo sem referência e passar esse inline, sem criar o temporário?