この例を考えてみましょう推論することはできません。GCC 4.6.1でコンパイラの警告:ラムダ戻り値の型が
#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';
}
を、これは予想される罰金とプリント出力(アルファベット)をコンパイルしますが、私は「ラムダリターンを言って警告を受けます戻り値が関数本体 ""内の唯一の文である場合にのみ、型を推論できます。
私は警告を取り除く方法を知っています(末尾の戻り値の型を使用するか、単にreturn isdigit(c);
と言っています)が、コンパイラは何も警告しないので不思議です。おそらくこのようなコードで間違っていますか?スタンダードはそれについて何か言いますか?
標準は、それが悪い形成なので、コンパイラは、少なくとも警告を表示することが義務付けられていると言うと、それをすべてでコンパイルすることを拒否して自由です(他のコンパイラが行う可能性が高いため)。 – ildjarn
@ildjarnなぜそれが悪いのかについて、あなたは標準を引用できますか? –
@VJovic:今は時間がないので、答えではなくコメントです。 :-) – ildjarn