Funktionsrückgabetyp-Abzug in C ++ 03

Die Tags stellen die Frage, berücksichtigen jedoch Folgendes:

template<typename F, typename A, typename R>
R call(F function, A arg) {
    return function(arg);
}

int foo(char) {
    return 5;
}

int main() {
    call(foo, 'a');
}

Der Compiler kompiliert dies problemlos, wenn der Parameter R entfernt und int manuell als Rückgabetyp eingefügt wird. Wie gezeigt, kann der Compiler nicht wissen, was er von R halten soll.

Wie kann ich Funktionsrückgabetypen in C ++ 03 ableiten?

Ich suche nach Methoden, bei denen der Rückgabetyp nicht manuell angegeben werden muss und die keine aufdringlichen Änderungen an den anderen Parametern erfordern. Wenn dies nicht möglich ist, suche ich nur nach einer verbindlichen Erklärung, die dies bestätigt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage