Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use associated types in unop and binop traits #20474

Closed
wants to merge 2 commits into from

Conversation

japaric
Copy link
Member

@japaric japaric commented Jan 3, 2015

binop traits (Add, Sub, etc) now have an associated type for their return type. Also, the RHS input parameter now defaults to Self (except for the Shl and Shr traits). For example, the Add trait now looks like this:

trait Add<Rhs=Self> {
    type Output;

    fn add(self, Rhs) -> Self::Output;
}

The Neg and Not traits now also have an associated type for their return type.

This breaks all existing implementations of these traits.

[breaking-change]


r? @aturon
cc #19148

@nikomatsakis
Copy link
Contributor

/me expresses delight

@japaric japaric mentioned this pull request Jan 3, 2015
bors added a commit that referenced this pull request Jan 4, 2015
closes #20486 
closes #20474 
closes #20441

[breaking-change]

The `Index[Mut]` traits now have one less input parameter, as the return type of the indexing operation is an associated type. This breaks all existing implementations.

---

binop traits (`Add`, `Sub`, etc) now have an associated type for their return type. Also, the RHS input parameter now defaults to `Self` (except for the `Shl` and `Shr` traits). For example, the `Add` trait now looks like this:

``` rust
trait Add<Rhs=Self> {
    type Output;

    fn add(self, Rhs) -> Self::Output;
}
```

The `Neg` and `Not` traits now also have an associated type for their return type.

This breaks all existing implementations of these traits.

---
Affected traits:

- `Iterator { type Item }`
- `IteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `DoubleEndedIteratorExt` no input/output types, uses `<Self as Iterator>::Item` in its methods
- `RandomAccessIterator` no input/output types
- `ExactSizeIterator` no input/output types, uses `<Self as Iterator>::Item` in its methods

This breaks all the implementations of these traits.
@bors bors closed this in #20490 Jan 4, 2015
@japaric japaric deleted the at-ops branch January 4, 2015 13:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants