Function fn_addr_eq

fn fn_addr_eq<T: FnPtr, U: FnPtr>(f: T, g: U) -> bool

Compares the addresses of the two function pointers for equality.

This is the same as f == g, but using this function makes clear that the potentially surprising semantics of function pointer comparison are involved.

There are very few guarantees about how functions are compiled and they have no intrinsic “identity”; in particular, this comparison:

Despite these false positives and false negatives, this comparison can still be useful. Specifically, if

then calling f and calling g will be equivalent.

Examples

use std::ptr;

fn a() { println!("a"); }
fn b() { println!("b"); }
assert!(!ptr::fn_addr_eq(a as fn(), b as fn()));