Поскольку между аргументами вашей функции и универсальным типом C
нет никакой связи, компилятор не знает, какой тип вы хотите заменить C
в вызове функции. В этом случае ваш код даже не использует тип C
, поэтому это не имеет значения, но в Rust важны «локальные рассуждения» - то есть он не заглядывает внутрь вашей функции, чтобы определить, что вы не используете * 1004. * на этапе проверки синтаксиса.
Вы можете явно сказать ему, что ваши типы используют оператор "turbofish", ::<>
, например,
println!("{}", lifetime_tester::<_, _, i32>(a, b, &c));