pub static CONST_ITEM_INTERIOR_MUTATIONS: &LintExpand description
The const_item_interior_mutations lint checks for calls which
mutates an interior mutable const-item.
§Example
use std::sync::Once;
const INIT: Once = Once::new(); // using `INIT` will always create a temporary and
// never modify it-self on use, should be a `static`
// instead for shared use
fn init() {
INIT.call_once(|| {
println!("Once::call_once first call");
});
INIT.call_once(|| { // this second will also print
println!("Once::call_once second call"); // as each call to `INIT` creates
}); // new temporary
}{{produces}}
§Explanation
Calling a method which mutates an interior mutable type has no effect as const-item are essentially inlined wherever they are used, meaning that they are copied directly into the relevant context when used rendering modification through interior mutability ineffective across usage of that const-item.
The current implementation of this lint only warns on significant std and
core interior mutable types, like Once, AtomicI32, … this is done out
of prudence to avoid false-positive and may be extended in the future.