Nie rozumiem dlaczego trzeci przypadek jest ok (nawet jeśli lambda za argumenty typu różni się od typu std::function
są), podczas gdy kompilator narzeka z czwartym:funkcja Lambda z różnych podpisów z std :: funkcji
function<int(int)> idInt = [](int i) {return i;}; //OK
function<int(int&)> idInt = [](int &i) {return i;}; //OK
function<int(int&)> idInt = [](int i) {return i;}; //OK
function<int(int)> idInt = [](int &i) {return i;}; //ERROR!
Bo istnieje konwersja z lwartości do rwartości (tak zwana "konwersja l-wartości do r-wartości"), ale nie ma konwersji z wartości r na wartość l. Konstruktory 'std :: function' nie dbają o zadeklarowane sygnatury, tylko o to, czy dorozumiane * wyrażenie wywołania * jest poprawne. –
Dlaczego nie używać 'auto'? 'auto idInt = ...' – ZDF