std::function
ermöglicht es Ihnen, dies zu tun:Warum funktioniert die Konstruktion nicht von verschiedenen Rückgabetypen?
std::function<void()> = []()->int{return 42;};
Aber nicht dieses:
std::function<void()> = [](int i)->int{return 42;};
Vermutlich weil der Rückgabetyp nicht Teil einer Funktion Unterschrift ist. Aber std::function
ist ein Klassentyp, der einen Rückgabetyp erhält und den Rückgabetyp des Funktionsobjekts kennt, aus dem er konstruiert ist. Es besteht also die Möglichkeit eines Compilerfehlers.
Warum gibt es keinen Compilerfehler?
Auch Ihr Code hat ein undefiniertes Verhalten. –
@sleeptightpupper: Es ist kein Duplikat der ersten, da die erste über Parameter, nicht unterschiedliche Rückgabetypen ist. –
@ NicolBolas Es ist definitiv ein [Duplikat] (http://Stackoverflow.com/a/9341064). Kurz gesagt ist "int" nicht implizit in "void" umwandelbar, so dass wir ein undefiniertes Verhalten erhalten. – user6412786