Skip to content

Type inference breakage on beta #41677

Closed
Closed
@Diggsey

Description

@Diggsey

This code compiles on stable, but fails on beta (playground link):

#![allow(unused_variables, dead_code)]

use std::marker::PhantomData;

trait Handle {
    type Inner;
}

struct ResizingHandle<H>(PhantomData<H>);
impl<H> Handle for ResizingHandle<H> {
    type Inner = H;
}

struct Sender<T, H: Handle<Inner=T>>(PhantomData<H>);
struct Receiver<T, H: Handle<Inner=T>>(PhantomData<H>);

type ResizingSender<T> = Sender<T, ResizingHandle<T>>;
type ResizingReceiver<T> = Receiver<T, ResizingHandle<T>>;

impl<T, H: Handle<Inner=T>> Receiver<T, H> {
    fn new() -> Self {
        Receiver(PhantomData)
    }
}

impl<T, H: Handle<Inner=T>> Sender<T, H> {
    fn new(receiver: &Receiver<T, H>) -> Self {
        Sender(PhantomData)
    }
}

fn channel<T>(size: usize) -> (ResizingSender<T>, ResizingReceiver<T>) {
    let rx = ResizingReceiver::new();
    let tx = ResizingSender::new(&rx);
    (tx, rx)
}


fn main() {
}

Error message:

error[E0282]: type annotations needed
  --> <anon>:33:9
   |
33 |     let rx = ResizingReceiver::new();
   |         ^^
   |         |
   |         consider giving `rx` a type
   |         cannot infer type for `Receiver<_, ResizingHandle<T>>`

Metadata

Metadata

Assignees

Labels

P-highHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-betaPerformance or correctness regression from stable to beta.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions