Closed
Description
extern "fastcall"
, "system"
, "cdecl"
and some others function pointers cannot be compared.
I tried this code:
extern "fastcall" fn test() {}
fn main() {
let fastcall_ptr: extern "fastcall" fn() = test;
let check = fastcall_ptr == test;
}
I expected to see this happen: the code compiles fine.
Instead, this happened:
error[E0369]: binary operation `==` cannot be applied to type `extern "fastcall" fn()`
note: an implementation of `std::cmp::PartialEq` might be missing for `extern "fastcall" fn()`
error[E0308]: mismatched types
expected fn pointer, found fn item
Replacing fastcall
with C
in this example, or getting rid of extern "fastcall"
entirely results in code that compiles fine:
fn test() {}
extern "C" fn c_test() {}
fn main() {
let ptr: fn() = test;
let c_ptr: extern "C" fn() = c_test;
let check = ptr == test;
let c_check = c_ptr == c_test;
}
rustc 1.16.0-nightly (4682271 2017-01-03)