#include <iostream>
void IsTrue(const bool value) {
if (value) {
std::cout << "value is True!\n";
}
}
int main()
{
IsTrue([]() { ; /* some lambda */ });
return 0;
}
value is True!
はなぜラムダはGCC &クランにtrue
に評価されていますか? MSVCはこれを構築できません(ラムダをブールに変換できません)。
コンパイラのバグですか?または、標準のどの段落でこれが許されていますか?
これが合法であるかどうかわからないが、ラムダを関数ポインタに変換し、その値(ヌルでない)をブールに使用してコンパイルするように見えるかどうかはわかりません。キャプチャを追加すると[コンパイルに失敗します](http://coliru.stacked-crooked.com/a/f28beac0173e86e4)。 – NathanOliver
MSVCには[非標準的な拡張機能](https://adishavit.github.io/2016/magical-captureless-lambdas/)があります。そのため、宛先関数のポインタ型を明示的に指定する必要があります。そうしないと、変換は失敗します。 – cpplearner
[関数ポインタとしてラムダを渡す]も参照してください(http://stackoverflow.com/q/28746744/1708801) –