about summary refs log tree commit diff
path: root/src/libstd/io/util.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-08-03 20:29:21 +0000
committerbors <bors@rust-lang.org>2015-08-03 20:29:21 +0000
commitd877e6540431d99b0945a3d27eeb466b0d693902 (patch)
tree6cae8df9b2700d9ada25a34b42e1a832ae7e8242 /src/libstd/io/util.rs
parent1fe32ca12c51afcd761d9962f51a74ff0d07a591 (diff)
parent93e5a74c87a5278d76050708bd59731c7f8fb5bb (diff)
downloadrust-d877e6540431d99b0945a3d27eeb466b0d693902.tar.gz
rust-d877e6540431d99b0945a3d27eeb466b0d693902.zip
Auto merge of #27134 - fhartwig:derive, r=huonw
Fixes #25022

This adapts the deriving mechanism to not repeat bounds for the same type parameter. To give an example: for the following code:

```rust
#[derive(Clone)]
pub struct FlatMap<I, U: IntoIterator, F> {
    iter: I,
    f: F,
    frontiter: Option<U::IntoIter>,
    backiter: Option<U::IntoIter>,
}
```
the latest nightly generates the following impl signature:

```rust
impl <I: ::std::clone::Clone,
      U: ::std::clone::Clone + IntoIterator,
      F: ::std::clone::Clone>
::std::clone::Clone for FlatMap<I, U, F> where
    I: ::std::clone::Clone,
    F: ::std::clone::Clone,
    U::IntoIter: ::std::clone::Clone,
    U::IntoIter: ::std::clone::Clone
```

With these changes, the signature changes to this:
```rust
impl <I, U: IntoIterator, F> ::std::clone::Clone for FlatMap<I, U, F> where
    I: ::std::clone::Clone,
    F: ::std::clone::Clone,
    U::IntoIter: ::std::clone::Clone
```
(Nothing in the body of the impl changes)
Note that the second impl is more permissive, as it doesn't have a `Clone` bound on `U` at all. There was a compile-fail test that failed due to this. I don't understand why we would want the old behaviour (and nobody on IRC could tell me either), so please tell me if there is a good reason that I missed.
Diffstat (limited to 'src/libstd/io/util.rs')
0 files changed, 0 insertions, 0 deletions