Рассмотрим этот пример:
#include <algorithm>
#include <iostream>
int main()
{
std::string str = "abcde4fghijk4l5mnopqrs6t8uvwxyz";
std::string str2;
std::remove_copy_if(str.begin(), str.end(),
std::back_inserter(str2),
[](char& c) {
if (std::isdigit(c))
return true; // <----- warning here
else
return false;
}
);
std::cout << str2 << '\n';
}
В GCC 4.6.1 это прекрасно компилирует и печатает ожидаемый вывод (алфавит), но я получаю предупреждение, говорящее "лямбда-тип возврата может быть выведен, только когда оператор return является единственным оператором в теле функции" .
Теперь я знаю, как избавиться от предупреждения (используя конечный тип возврата или просто сказать return isdigit(c);
), но мне любопытно, так как компилятор не предупреждает ни за что (или так должно быть): что может пойти не так в коде, как это? Стандарт говорит что-нибудь об этом?