explicit_generic_args_with_impl_trait
The tracking issue for this feature is: #83701
The explicit_generic_args_with_impl_trait
feature gate lets you specify generic arguments even
when impl Trait
is used in argument position.
A simple example is:
#![feature(explicit_generic_args_with_impl_trait)] fn foo<T: ?Sized>(_f: impl AsRef<T>) {} fn main() { foo::<str>("".to_string()); }
This is currently rejected:
error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position
--> src/main.rs:6:11
|
6 | foo::<str>("".to_string());
| ^^^ explicit generic argument not allowed
However it would compile if explicit_generic_args_with_impl_trait
is enabled.
Note that the synthetic type parameters from impl Trait
are still implicit and you
cannot explicitly specify these:
#![feature(explicit_generic_args_with_impl_trait)] fn foo<T: ?Sized>(_f: impl AsRef<T>) {} fn bar<T: ?Sized, F: AsRef<T>>(_f: F) {} fn main() { bar::<str, _>("".to_string()); // Okay bar::<str, String>("".to_string()); // Okay foo::<str>("".to_string()); // Okay foo::<str, String>("".to_string()); // Error, you cannot specify `impl Trait` explicitly }