Siehe 5.2.10/6 [expr.reinterpret.cast]:
Ein Funktionszeiger kann explizit in einen Funktionszeiger von einem anderen Typ umgewandelt werden. Der Aufruf einer Funktion durch einen Zeiger auf einen Funktionstyp, der nicht mit dem bei der Definition der Funktion verwendeten Typ übereinstimmt, ist nicht definiert.
Das heißt, Note als ein Beispiel, dass C++ Sie zu dereferenzieren einen Null-Zeiger ermöglicht, vielleicht erlaubt nicht der richtige Begriff ist. Auch
Der folgende Befehl erstellt:
reinterpret_cast<void(*)(A*, int)>(f)(&b, 42);
Es ist erlaubt, sowie der in der Frage, egal ob es wie erwartet funktioniert oder nicht (es meist auf Ihren Erwartungen abhängt, wie bereits von @ luk32 in den Kommentaren).
Die Antwort auf Ihre Frage wäre ja, die Besetzung ist erlaubt, aber das Aufrufen der Funktion durch den neuen Zeiger führt zu einem undefinierten Verhalten.
Wahrscheinlich hängt es von den Erwartungen ab ... – luk32
Ist das nur akademische Neugier, oder gibt es ein praktisches Problem, das Sie zu lösen versuchen? –
@RSahu: Es ist tatsächlich nützlich für mich geworden, aber ich bevorzuge es, das Beispiel so klein wie möglich zu halten. –