]> git.proxmox.com Git - rustc.git/blobdiff - src/doc/reference/src/glossary.md
New upstream version 1.52.0~beta.3+dfsg1
[rustc.git] / src / doc / reference / src / glossary.md
index 03155170c33b16eaee3860e77e96112b48528710..f88ba2f0fdd0c28dfaa81df070b0965d6163e6ce 100644 (file)
@@ -234,6 +234,22 @@ It allows a type to make certain promises about its behavior.
 
 Generic functions and generic structs can use traits to constrain, or bound, the types they accept.
 
+### Turbofish
+
+Paths with generic parameters in expressions must prefix the opening brackets with a `::`.
+Combined with the angular brackets for generics, this looks like a fish `::<>`.
+As such, this syntax is colloquially referred to as turbofish syntax.
+
+Examples:
+
+```rust
+let ok_num = Ok::<_, ()>(5);
+let vec = [1, 2, 3].iter().map(|n| n * 2).collect::<Vec<_>>();
+```
+
+This `::` prefix is required to disambiguate generic paths with multiple comparisons in a comma-separate list.
+See [the bastion of the turbofish][turbofish test] for an example where not having the prefix would be ambiguous.
+
 ### Uncovered type
 
 A type which does not appear as an argument to another type. For example,
@@ -286,6 +302,7 @@ example of an uninhabited type is the [never type] `!`, or an enum with no varia
 [structs]: items/structs.md
 [trait objects]: types/trait-object.md
 [traits]: items/traits.md
+[turbofish test]: https://github.com/rust-lang/rust/blob/master/src/test/ui/bastion-of-the-turbofish.rs
 [types]: types.md
 [undefined-behavior]: behavior-considered-undefined.md
 [unions]: items/unions.md