-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed as duplicate of#24066
Labels
A-inferenceArea: Type inferenceArea: Type inferenceA-trait-systemArea: Trait systemArea: Trait systemC-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.Relevant to the types team, which will review and decide on the PR/issue.
Description
Hi. I apologize if this is a dup (I tried to search, but is it not easy to distill this into words to search for). If it's not a dup please update the title to something more meaningful.
When trying to compile (in play)
pub trait Distribution<T> {}
impl Distribution<u16> for () {}
fn gen<K>() -> K
where
(): Distribution<K> {
todo!()
}
fn foo<T>() -> u16
where
(): Distribution<T>,
{
gen()
}
I get the error:
error[E0308]: mismatched types
--> src/lib.rs:15:5
|
11 | fn foo<T>() -> u16
| - --- expected `u16` because of return type
| |
| this type parameter
...
15 | gen()
| ^^^^^ expected `u16`, found type parameter `T`
|
= note: expected type `u16`
found type parameter `T`
It it should be able to determine that the hole in gen::<_>()
is u16
because that's the return type of foo()
. Instead the compiler thinks the hole must be T
, which is not true (in fact, if you change the call to gen()
to gen::<u16>()
the code compiles).
This happens in stable (1.46.0) as well as nightly 1.49.0-nightly (2020-10-05 a1dfd24).
Metadata
Metadata
Assignees
Labels
A-inferenceArea: Type inferenceArea: Type inferenceA-trait-systemArea: Trait systemArea: Trait systemC-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.Relevant to the types team, which will review and decide on the PR/issue.