Closed
Description
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>>`