Z czystej ciekawości czemu lambda a nie zwykła funkcja?
Rozumiem, że chcesz pisać nowoczesny kod, ale ja nie za bardzo widzę tutaj sens takiego rozwiązania.
Twoja lambda ani nie jest nigdzie przekazywana ani nie jest króciutką nienazwaną funkcją wstawioną inline jako argument innej funkcji.
Nie mówię, że rozwiązanie jest złe, po prostu nie rozumiem wyboru.
Osobiście wykorzystałbym z std::transform:
while (fData >> sHashed >> iKey) {
iKey %= 26;
std::transform(sHashed.begin(), sHashed.end(),
std::ostreambuf_iterator<char>(fOutput), [iKey](char c) {
return (static_cast<int>(c) - iKey >= 65 ? static_cast<int>(c) - iKey :
91 + (static_cast<int>(c) - 65 - iKey));
});
fOutput << std::endl;
}