#include <iostream>
void IsTrue(const bool value) {
if (value) {
std::cout << "value is True!\n";
}
}
int main()
{
IsTrue([]() { ; /* some lambda */ });
return 0;
}
wyjściowa:Dlaczego lambda jest konwertowana na wartość bool, której wartość jest prawdziwa?
value is True!
Dlaczego lambda ocenić na true
na GCC & dzyń? MSVC nie może tego zbudować (nie można przekonwertować lambda na bool).
Czy jest to błąd kompilatora? Albo który akapit normy na to pozwala?
Nie jestem pewien, czy jest to legalne, czy nie, ale wydaje się, że konwertuje lambdę na wskaźnik funkcji, a następnie używa tej wartości (która nie jest pusta) w bool, więc kompiluje. Jeśli dodasz przechwytywanie [nie uda się skompilować] (http://coliru.stacked-crooked.com/a/f28beac0173e86e4). – NathanOliver
MSVC ma [niestandardowe rozszerzenie] (https://adishavit.github.io/2016/magical-captureless-lambdas/), więc wymaga jawnie przeliterować typ wskaźnika funkcji docelowej, w przeciwnym razie konwersja się nie powiedzie. – cpplearner
Zobacz także: [Podawanie lambda jako wskaźnika funkcji] (http://stackoverflow.com/q/28746744/1708801) –