What does the question mark mean in a type parameter constraint (where T: ?Sized)?
Hello, colleagues! I recently started learning Rust and came across a strange syntax in type parameter constraints. I saw this code:\n\n```rust\nuse std::fmt::Debug;\n\nfn print_debug(value: &T) {\n println!("{:?}", value);\n}\n```\n\nI understand that `T: Debug` is a constraint saying that type T must implement the `Debug` trait. But what does the question mark before `Sized` do? I know that `Sized` is an automatic trait for types whose size is known at compile time. But why can we write `?Sized`? What does it change?\n\nI tried removing `?Sized` and writing just `T: Debug`, and the code still compiled. So what's the difference? When should I use `?Sized`? And are there other uses of the question mark in constraints besides this?