Annex F (informative) Core undefined behavior [ub]

F.3 [expr]: Expressions [ub.expr]

F.3.11[ub:expr.call.different.type]
Specified in: [expr.call]

Calling a function through an expression whose function type is not call-compatible with the function type of the called function's definition results in undefined behavior.
[Example 1: using f_float = int (*)(float); using f_int = int (*)(int); int f1(float) { return 10; } int f2(int) { return 20; } int main() { return reinterpret_cast<f_int>(f1)(20); // undefined behavior, the function type of the expression // is different from the called functions definition } — end example]