diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2018-02-21 16:29:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-21 16:29:46 +0100 |
| commit | aec653536c3db82d74bb1a274b7df9d9dc582ec4 (patch) | |
| tree | 36cba18c84e1e646e0d12d03c6e07f095c2d7ef5 /src/test/incremental/thinlto | |
| parent | 2a32060fb6251b5226da9785f81390151720c6bb (diff) | |
| parent | 44d07df1cc5913b108d9207410ede33c38905bec (diff) | |
| download | rust-aec653536c3db82d74bb1a274b7df9d9dc582ec4.tar.gz rust-aec653536c3db82d74bb1a274b7df9d9dc582ec4.zip | |
Rollup merge of #47833 - Aaron1011:final_auto_trait, r=GuillaumeGomez
Generate documentation for auto-trait impls
A new section is added to both both struct and trait doc pages.
On struct/enum pages, a new 'Auto Trait Implementations' section displays any synthetic implementations for auto traits. Currently, this is only done for Send and Sync.

On trait pages, a new 'Auto Implementors' section displays all types which automatically implement the trait. Effectively, this is a list of all public types in the standard library.

Synthesized impls for a particular auto trait ('synthetic impls') take generic bounds into account. For example, a type
```rust
struct Foo<T>(T)
```
will have 'impl<T> Send for Foo<T> where T: Send' generated for it.
Manual implementations of auto traits are also taken into account. If we have
the following types:
```rust
struct Foo<T>(T)
struct Wrapper<T>(Foo<T>)
unsafe impl<T> Send for Wrapper<T>' // pretend that Wrapper<T> makes this sound somehow
```
Then Wrapper will have the following impl generated:
```rust
impl<T> Send for Wrapper<T>
```
reflecting the fact that 'T: Send' need not hold for 'Wrapper<T>: Send' to hold
Lifetimes, HRTBS, and projections (e.g. '<T as Iterator>::Item') are taken into account by synthetic impls:

However, if a type can *never* implement a particular auto trait (e.g. `struct MyStruct<T>(*const T)`), then a negative impl will be generated (in this case, `impl<T> !Send for MyStruct<T>`)
All of this means that a user should be able to copy-paste a syntheticimpl into their code, without any observable changes in behavior (assuming the rest of the program remains unchanged).
Diffstat (limited to 'src/test/incremental/thinlto')
0 files changed, 0 insertions, 0 deletions
