diff --git a/src/doc/unstable-book/src/language-features/impl-trait-in-bindings.md b/src/doc/unstable-book/src/language-features/impl-trait-in-bindings.md new file mode 100644 index 00000000000..896465cf649 --- /dev/null +++ b/src/doc/unstable-book/src/language-features/impl-trait-in-bindings.md @@ -0,0 +1,28 @@ +# `impl_trait_in_bindings` + +The tracking issue for this feature is: [#34511] + +[#34511]: https://github.com/rust-lang/rust/issues/34511 + +------------------------ + +The `impl_trait_in_bindings` feature gate lets you use `impl Trait` syntax in +`let`, `static`, and `const` bindings. + +A simple example is: + +```rust +#![feature(impl_trait_in_bindings)] + +use std::fmt::Debug; + +fn main() { + let a: impl Debug + Clone = 42; + let b = a.clone(); + println!("{:?}", b); // prints `42` +} +``` + +Note however that because the types of `a` and `b` are opaque in the above +example, calling inherent methods or methods outside of the specified traits +(e.g., `a.abs()` or `b.abs()`) is not allowed, and yields an error.