Function pointer with a reference argument cannot derive Debug
up vote
0
down vote
favorite
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)).
rust
add a comment |
up vote
0
down vote
favorite
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)).
rust
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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)).
rust
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)).
rust
rust
edited Nov 19 at 17:46
Shepmaster
144k11268401
144k11268401
asked Nov 19 at 17:44
Johan Bjäreholt
3071217
3071217
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
4
down vote
accepted
Is this a bug in Rust
No, but it is a limitation:
- Cannot derive(Debug) for a struct with a function with a reference parameter (#45048)
- #[derive] Debug, PartialEq, Hash, etc. for any function pointers, regardless of type signature (#54508)
is there a solution or an alternative method
Yes, you must implement Debug for the type Enum yourself.
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
Is this a bug in Rust
No, but it is a limitation:
- Cannot derive(Debug) for a struct with a function with a reference parameter (#45048)
- #[derive] Debug, PartialEq, Hash, etc. for any function pointers, regardless of type signature (#54508)
is there a solution or an alternative method
Yes, you must implement Debug for the type Enum yourself.
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
add a comment |
up vote
4
down vote
accepted
Is this a bug in Rust
No, but it is a limitation:
- Cannot derive(Debug) for a struct with a function with a reference parameter (#45048)
- #[derive] Debug, PartialEq, Hash, etc. for any function pointers, regardless of type signature (#54508)
is there a solution or an alternative method
Yes, you must implement Debug for the type Enum yourself.
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
add a comment |
up vote
4
down vote
accepted
up vote
4
down vote
accepted
Is this a bug in Rust
No, but it is a limitation:
- Cannot derive(Debug) for a struct with a function with a reference parameter (#45048)
- #[derive] Debug, PartialEq, Hash, etc. for any function pointers, regardless of type signature (#54508)
is there a solution or an alternative method
Yes, you must implement Debug for the type Enum yourself.
Is this a bug in Rust
No, but it is a limitation:
- Cannot derive(Debug) for a struct with a function with a reference parameter (#45048)
- #[derive] Debug, PartialEq, Hash, etc. for any function pointers, regardless of type signature (#54508)
is there a solution or an alternative method
Yes, you must implement Debug for the type Enum yourself.
edited Nov 19 at 18:23
answered Nov 19 at 17:52
Shepmaster
144k11268401
144k11268401
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
add a comment |
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
Oh, that's unfortunate. Works for a few of my test cases but I also now get a stack overflow in one apparently but that's a seperate issue. Thanks!
– Johan Bjäreholt
Nov 19 at 18:46
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53380040%2ffunction-pointer-with-a-reference-argument-cannot-derive-debug%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown