Open yoshuawuyts opened 3 years ago
Found the solution to my bug by the way. This did the trick:
let mut combinations = (1..2).combinations::<2>();
assert_eq!(combinations.next(), None);
I think it's fair to say that the diagnostics were not a great help here. And in particular providing the wrong param ([usize; 2]
) yielded confusing diagnostics.
error[E0282]: type annotations needed --> src\lib.rs:144:32 144 let mut combinations = (1..2).combinations(); ^^^^^^^^^^^^^^^^^^^^^ = note: unable to infer the value of a const parameter
can you provide a full example for this? we should emit a suggestion to use a const arg here. For example in https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=dd05e205a3af777ec388a4dba98e66e8
Oh wow, the diagnostics for array_windows
is heaps better! A full implementation of const Iterator::combinations
can be found here: https://github.com/yoshuawuyts/const-combinations/blob/main/src/lib.rs
Current Behavior
Given the following code:
where
Iterator::combinations
is defined as:The following diagnostic is provided:
Attempting a fix, and failing:
Naively I thought I could fix this by adding a turbofish, but that doesn't seem to help:
Expected behavior
Providing a hint on how to correctly define const generics would be immensely helpful. I'm sure I'll be able to figure out the syntax for this eventually (currently going through https://github.com/rust-lang/rust/pull/78460 among others), but given we're set for a 1.51 stabilization of
min_const_generics
I suspect more people will be running into this soon.Further Considerations
I was looking at how hints work for e.g. missing type params in
collect
, and noticed no hints are provided there either. It only explains what to do, not showing how to do it. For something that's notoriously tricky to learn that seems like it could benefit from hints as well.