std::function
permette di fare questo:Perché la funzione non impedisce la costruzione da un tipo di ritorno diverso?
std::function<void()> = []()->int{return 42;};
Ma non questa:
std::function<void()> = [](int i)->int{return 42;};
Presumibilmente perché il tipo di ritorno non è parte della firma di una funzione. Ma std::function
è un tipo di classe che ha un tipo restituito e conosce il tipo di ritorno dell'oggetto funzione da cui è stato costruito. Quindi c'è una possibilità di un errore del compilatore qui.
Perché non c'è un errore del compilatore?
Anche il tuo codice ha un comportamento non definito. –
@sleeptightpupper: Non è un duplicato del primo, poiché il primo riguarda i parametri, non i tipi di ritorno diversi. –
@NicolBolas È sicuramente un [duplicato] (http://stackoverflow.com/a/9341064). Il corto di esso è 'int' non è implicitamente convertibile in' void' quindi otteniamo un comportamento indefinito. – user6412786