Skip to content

Commit 57ac379

Browse files
committed
Correct overly broad definition of 'static kind bound.
While double-checking my understanding of the meaning of `'static`, I made the following test program: ```rust fn foo<X:'static>(_x: X) { } #[cfg(not(acceptable))] fn bar() { let a = 3; let b = &a; foo(b); } #[cfg(acceptable)] fn bar() { static c : int = 4;; let d : &'static int = &c; foo(d); } fn main() { bar(); } ``` Transcript of compiling above program, illustrating that the `--cfg acceptable` variant of `bar` compiles successfully, showing that the `'static` kind bound only disallows non-`static` references, not *all* references: ``` % rustc --version /Users/fklock/opt/rust-dbg/bin/rustc 0.10-pre (caf17fe 2014-03-21 02:21:50 -0700) host: x86_64-apple-darwin % rustc /tmp/s.rs /tmp/s.rs:7:5: 7:8 error: instantiating a type parameter with an incompatible type `&int`, which does not fulfill `'static` /tmp/s.rs:7 foo(b); ^~~ error: aborting due to previous error % rustc --cfg acceptable /tmp/s.rs % ./s % ``` (Note that the explicit type annotation on `let d : &'static int` is necessary; it did not suffice for me to just write `let d = &'static c;`. That might be a latent bug, I am not sure yet.) Anyway, a fix to the documentation seemed prudent.
1 parent 2c7f3b8 commit 57ac379

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/doc/rust.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -3446,8 +3446,9 @@ The kinds are:
34463446
This kind includes scalars and immutable references,
34473447
as well as structural types containing other `Pod` types.
34483448
`'static`
3449-
: Types of this kind do not contain any references;
3450-
this can be a useful guarantee for code
3449+
: Types of this kind do not contain any references (except for
3450+
references with the `static` lifetime, which are allowed).
3451+
This can be a useful guarantee for code
34513452
that breaks borrowing assumptions
34523453
using [`unsafe` operations](#unsafe-functions).
34533454
`Drop`

0 commit comments

Comments
 (0)