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?