Consider an example where a type is to be plugged in as a part of an expression:
macro_rules! new {($t: ident) => {$t::new()};}
fn main() {
let _: Vec<i32> = new!{Vec};
}
Actually we would like to use ty
instead of ident
or tt
, but that is not possible. It has to be expressed this way:
macro_rules! new {($t: ty) => {<$t>::new()};}
fn main() {
let _: Vec<i32> = new!{Vec<i32>};
}
But now it is not allowed to omit the type arguments altogether, i.e. it is not allowed to write Vec
instead of Vec<i32>
or Vec<_>
.
Is there any specific reason why $t::new()
should not be permitted for $t: ty
or could we fix that?