Clippy lints / Suspicious
Clippy lint · Suspicious · checked with Clippy 0.1.99
clippy::needless_maybe_sized: `?Sized` bound is ignored because of a `Sized` requirement
What it meansLints ?Sized bounds applied to type parameters that cannot be unsized It is in the suspicious group and warns by default.
What you see
warning: `?Sized` bound is ignored because of a `Sized` requirement --> main.rs:4:17 | 4 | fn f<T: Clone + ?Sized>(t: &T) {} | ^^^^^^ | note: `T` cannot be unsized because of the bound --> main.rs:4:9 | 4 | fn f<T: Clone + ?Sized>(t: &T) {} | ^^^^^ = note: ...because `Clone` has the bound `Sized` = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#needless_maybe_sized = note: `#[warn(clippy::needless_maybe_sized)]` on by default help: change the bounds that require `Sized`, or remove the `?Sized` bound | 4 - fn f<T: Clone + ?Sized>(t: &T) {} 4 + fn f<T: Clone>(t: &T) {} |
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
The ?Sized bound is misleading because it cannot be satisfied by an unsized type
Code that is most likely wrong or useless. Warns by default.
How to fix it
Clippy does not fix this one automatically (its suggestion may change behaviour, so it only shows it). Change the code by hand:
Flagged
// `T` cannot be unsized because `Clone` requires it to be `Sized`
fn f<T: Clone + ?Sized>(t: &T) {}
Write this instead
fn f<T: Clone>(t: &T) {}
// or choose alternative bounds for `T` so that it can be unsized
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::needless_maybe_sized)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
needless_maybe_sized = "allow"One run
cargo clippy -- -A clippy::needless-maybe-sizedThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Lints ?Sized bounds applied to type parameters that cannot be unsized
Why is this bad?
The ?Sized bound is misleading because it cannot be satisfied by an
unsized type
Example
// `T` cannot be unsized because `Clone` requires it to be `Sized`
fn f<T: Clone + ?Sized>(t: &T) {}
Use instead:
fn f<T: Clone>(t: &T) {}
// or choose alternative bounds for `T` so that it can be unsized
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- mut_range_boundattempt to mutate range bound within loop
- mutable_key_typeChecks for sets/maps with mutable key types
- needless_character_iterationchecking if a string is ascii using iterators
- no_effect_replacereplacing text with itself
- non_canonical_clone_implnon-canonical implementation of `clone` on a `Copy` type
- non_canonical_partial_ord_implChecks for non-canonical implementations of PartialOrd when Ord is already implemented
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::mut_range_boundattempt to mutate range bound within loopRead it next →Did this answer your question?