E0274
A type argument breaks what a generic body assumes of its type parameter (see above): a capability-bearing type for a parameter that a contract uses or that a plain fn closure captures, or a type holding a Scope for a parameter that an unscoped closure captures. Checked at a call of a generic function or method, where a bound is satisfied through a generic impl, and at an impl of a trait for its Self and its generics. A generic that instantiates the parameter with one of its own passes the assumption on. The message names the type, the parameter, and why it must stay pure. Spans the called function's or method's name, the call when a bound is satisfied through an impl, or the impl's type.
Machine-applicable fix: none.
Example
This program fails with E0274.
trait Speak {
fn ok(self) -> Bool
}
impl Speak for Stdout {
fn ok(self) -> Bool {
let _ = self.println("checking")
true
}
}
fn check<T: Speak>(x: T) -> Int
requires x.ok()
{
1
}
fn main(out: Stdout) {
let n = check(out)
}
Fixed
The same program, fixed.
trait Speak {
fn ok(self) -> Bool
}
impl Speak for Int {
fn ok(self) -> Bool {
self > 0
}
}
fn check<T: Speak>(x: T) -> Int
requires x.ok()
{
1
}
fn main(out: Stdout) {
let n = check(5)
}
Listed in the checker notes. oskac explain E0274 prints this entry offline.