avoid creating an Instance only to immediately disassemble it again
This commit is contained in:
parent
86ce911f90
commit
67c99d6338
13 changed files with 54 additions and 114 deletions
|
@ -1,5 +1,4 @@
|
|||
An associated `const`, `const` parameter or `static` has been referenced
|
||||
in a pattern.
|
||||
A generic parameter or `static` has been referenced in a pattern.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
|
@ -15,25 +14,25 @@ trait Bar {
|
|||
|
||||
fn test<A: Bar>(arg: Foo) {
|
||||
match arg {
|
||||
A::X => println!("A::X"), // error: E0158: associated consts cannot be
|
||||
// referenced in patterns
|
||||
A::X => println!("A::X"), // error: E0158: constant pattern depends
|
||||
// on a generic parameter
|
||||
Foo::Two => println!("Two")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Associated `const`s cannot be referenced in patterns because it is impossible
|
||||
Generic parameters cannot be referenced in patterns because it is impossible
|
||||
for the compiler to prove exhaustiveness (that some pattern will always match).
|
||||
Take the above example, because Rust does type checking in the *generic*
|
||||
method, not the *monomorphized* specific instance. So because `Bar` could have
|
||||
theoretically infinite implementations, there's no way to always be sure that
|
||||
theoretically arbitrary implementations, there's no way to always be sure that
|
||||
`A::X` is `Foo::One`. So this code must be rejected. Even if code can be
|
||||
proven exhaustive by a programmer, the compiler cannot currently prove this.
|
||||
|
||||
The same holds true of `const` parameters and `static`s.
|
||||
The same holds true of `static`s.
|
||||
|
||||
If you want to match against an associated `const`, `const` parameter or
|
||||
`static` consider using a guard instead:
|
||||
If you want to match against a `const` that depends on a generic parameter or a
|
||||
`static`, consider using a guard instead:
|
||||
|
||||
```
|
||||
trait Trait {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue