Reputation: 780
I have a enum where I want to generalize an function pointer. As soon as I add a reference inside the function pointer definition. it fails to compile because it cannot print it with Debug
:
fn div1(t: i64, b: i64) -> i64 {
t / b
}
fn div2(t: i64, b: &i64) -> i64 {
t / b
}
#[derive(Debug)]
enum Enum {
FnTest1(fn(i64, i64) -> i64),
FnTest2(fn(i64, &i64) -> i64),
}
fn main() {
println!("{:?}", Enum::FnTest1(div1));
println!("{:?}", Enum::FnTest2(div2));
}
The error I get is this
error[E0277]: `for<'r> fn(i64, &'r i64) -> i64` doesn't implement `std::fmt::Debug`
--> src/main.rs:12:13
|
12 | FnTest2(fn(i64, &i64) -> i64),
| ^^^^^^^^^^^^^^^^^^^^ `for<'r> fn(i64, &'r i64) -> i64` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
|
= help: the trait `std::fmt::Debug` is not implemented for `for<'r> fn(i64, &'r i64) -> i64`
= note: required because of the requirements on the impl of `std::fmt::Debug` for `&for<'r> fn(i64, &'r i64) -> i64`
= note: required for the cast to the object type `dyn std::fmt::Debug`
It only shows an error for FnTest2
which has a reference argument while FnTest1
works fine.
Is this a bug in Rust or is there a solution or an alternative method to this issue?
I am running Rust nightly (rustup says: rustc 1.30.0-nightly (ae7fe84e8 2018-09-26)
).
Upvotes: 0
Views: 966
Reputation: 431489
Is this a bug in Rust
No, but it is a limitation:
is there a solution or an alternative method
Yes, you must implement Debug
for the type Enum
yourself.
Upvotes: 4