Currently this program:
#![feature(associated_types)]
trait A {
type T;
fn foo(&self) -> <Self as A>::T;
fn bar(&self) -> <Self as A>::T { self.foo() }
}
fn main() {}
Fails to compile as:
1.rs:5:39: 5:49 error: cannot move a value of type T: the size of T cannot be statically determined [E0161]
1.rs:5 fn bar(&self) -> <Self as A>::T { self.foo() }
^~~~~~~~~~
According to RFC 59 we should be able to fix it by (currently unimplemented)
trait A {
type T : Sized;
...
}
But,
-
Shouldn’t associated types be Sized by default? As associated types are to be used to replace “output” type parameters, it is more convenient to be Sized.
-
If associated types are Sized by default, what should be the syntax then if we want to allow unsized associated types? The generic spelling currently suggests something like
type Sized? T;