-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-trait-systemArea: Trait systemArea: Trait system
Description
Rust allows impl blocks to be generic, even if the type is not generic. However, any methods contained in such a generic impl block must use every generic parameter, or the functions become uncallable (because the other types cannot be specified). Rust will not find any errors or warnings in such a defintion, only at the call site.
Rust should at least complain at the declaration site if all generic parameters are not used by every method. Alternatively, we could disallow generics on impl blocks that are not used as type parameters on the implementing type.
Example Code
struct Foo;
impl<A: std::fmt::Show, B> Foo {
fn func(&mut self, a: A)
{
println!("{}", a);
}
}
fn main() {
let mut f = Foo;
// uncomment the following line, program fails to compile.
//f.func(42i); // error: cannot determine a type for this expression: unconstrained type
}
Metadata
Metadata
Assignees
Labels
A-trait-systemArea: Trait systemArea: Trait system