Skip to content

Commit 8561b47

Browse files
committed
---
yaml --- r: 236103 b: refs/heads/stable c: 99043dd h: refs/heads/master i: 236101: 88b8cb4 236099: b44a960 236095: 23a57a0 v: v3
1 parent 974a4f1 commit 8561b47

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/heads/tmp: afae2ff723393b3ab4ccffef6ac7c6d1809e2da0
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: f859507de8c410b648d934d8f5ec1c52daac971d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: 5f6e0abe27aa6632f95492ad8864d8084c1bacef
32+
refs/heads/stable: 99043dde9dd2d0507ad2e3cda65b9d3e9244f13f
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b
3535
refs/tags/1.2.0: f557861f822c34f07270347b94b5280de20a597e

branches/stable/src/doc/tarpl/exotic-sizes.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,9 @@ actually possible to communicate this at the type level by returning a
9595
knowing that it's *statically impossible* for this value to be an `Err`, as
9696
this would require providing a value of type Void.
9797

98-
In principle, Rust can do some interesting analysees and optimizations based
98+
In principle, Rust can do some interesting analyses and optimizations based
9999
on this fact. For instance, `Result<T, Void>` could be represented as just `T`,
100-
because the Err case doesn't actually exist. Also in principle the following
101-
could compile:
100+
because the Err case doesn't actually exist. The following *could* also compile:
102101

103102
```rust,ignore
104103
enum Void {}
@@ -111,3 +110,9 @@ let Ok(num) = res;
111110

112111
But neither of these tricks work today, so all Void types get you today is
113112
the ability to be confident that certain situations are statically impossible.
113+
114+
One final subtle detail about empty types is that raw pointers to them are
115+
actually valid to construct, but dereferencing them is Undefined Behaviour
116+
because that doesn't actually make sense. That is, you could model C's `void *`
117+
type with `*const Void`, but this doesn't necessarily gain anything over using
118+
e.g. `*const ()`, which *is* safe to randomly dereference.

0 commit comments

Comments
 (0)