Полагаю, если вы не используете переменную в качестве параметра функтора, вам следует использовать уровень доступа текущей функции. Если вы считаете, что этого не следует делать, то отделите свою лямбду от этой функции, она не является ее частью.
В любом случае, вы можете легко достичь того же, чего хотите, используя вместо этого другую ссылку на констант:
#include <cstdlib>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string strings[] =
{
"hello",
"world"
};
static const size_t num_strings = sizeof(strings)/sizeof(strings[0]);
string best_string = "foo";
const string& string_processed = best_string;
for_each( &strings[0], &strings[num_strings], [&string_processed] (const string& s) -> void
{
string_processed = s; // this should fail
}
);
return 0;
}
Но это то же самое, что предположить, что ваша лямбда должна быть изолирована от текущей функции, что делает ее не лямбда.