¿Qué significa el signo de interrogación en la restricción de tipo parámetro (where T: ?Sized)?
¡Hola, colegas! Recientemente comencé a aprender Rust y me encontré con una sintaxis extraña en las restricciones de tipo parámetro. Vi este código:
```rust
use std::fmt::Debug;
fn print_debug(value: &T) {
println!("{:?}", value);
}
```
Entiendo que `T: Debug` es una restricción que dice que el tipo T debe implementar el trait `Debug`. Pero, ¿qué hace el signo de interrogación antes de `Sized`? Sé que `Sized` es un trait automático para tipos cuyo tamaño se conoce en tiempo de compilación. Pero, ¿por qué podemos escribir `?Sized`? ¿Qué cambia?
Intenté quitar `?Sized` y escribir solo `T: Debug`, y el código igual se compiló. Entonces, ¿cuál es la diferencia? ¿Cuándo se debe usar `?Sized`? ¿Y hay otros usos del signo de interrogación en restricciones, además de `?Sized`?
Agradecería una explicación detallada. Ya busqué en Google, pero en la documentación la explicación parece demasiado formal. Quiero entender con ejemplos cómo funciona y para qué sirve.