# Rust Traits ## See also ### - [[Traits (Rust book)]] ## Resources ### `std` docs - [Keyword dyn](https://doc.rust-lang.org/std/keyword.dyn.html) ### [[Rust Reference]] - [Traits](https://doc.rust-lang.org/reference/items/traits.html#traits) - Trait bounds - Generic traits - Object Safety - Supertraits - Unsafe traits - Parameter Patterns - Item visibility - [Special types and traits](https://doc.rust-lang.org/reference/special-types-and-traits.html#special-types-and-traits) ## General ### [Special types and traits](https://doc.rust-lang.org/reference/special-types-and-traits.html#auto-traits) - `Box<T>` - `Rc<T>` - `Arc<T>` - `Pin<P>` - `UnsafeCell<T>` - `PhantomData<T>` ### [Operator Traits](https://doc.rust-lang.org/reference/special-types-and-traits.html#operator-traits) - `Deref` and `DerefMut` - `Drop` - `Copy` - `Clone` - `Send` - `Sync` ### [Auto traits](https://doc.rust-lang.org/reference/special-types-and-traits.html#auto-traits) - `Send` - `Sync` - `Unpin` - `UnwindSafe` - `RefUnwindSafe` ### [Sized](https://doc.rust-lang.org/reference/special-types-and-traits.html#sized) The [`Sized`](https://doc.rust-lang.org/std/marker/trait.Sized.html) trait indicates that the size of this type is known at compile-time; that is, it's not a [dynamically sized type](https://doc.rust-lang.org/reference/dynamically-sized-types.html). [Type parameters](https://doc.rust-lang.org/reference/types/parameters.html) are `Sized` by default, as are [associated types](https://doc.rust-lang.org/reference/items/associated-items.html#associated-types). `Sized` is always implemented automatically by the compiler, not by [implementation items](https://doc.rust-lang.org/reference/items/implementations.html). These implicit `Sized` bounds may be relaxed by using the special `?Sized` bound.