Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Aliasing trait with associated types [duplicate]

Tags:

rust

Is it possible to create a trait alias with specified associated types? I'm using a method from similar question Type alias for multiple traits

trait Trait {
    type Item;
}

fn print<T>(value: T) where T: Trait<Item=char> {
}

trait Alias: Trait {}
impl<T: Trait<Item=char>> Alias for T {}

fn print_alias<T: Alias>(value: T) {
    print(value)
}

fn main() {
}

However it fails to compile with following error:

<anon>:12:5: 12:10 error: type mismatch resolving `<T as Trait>::Item == char`:
 expected associated type,
    found char [E0271]
<anon>:12     print(value)
              ^~~~~
<anon>:12:5: 12:10 note: required by `print`
<anon>:12     print(value)
              ^~~~~
error: aborting due to previous error

Playpen link: http://is.gd/LE4h6a

like image 529
Mike Krasnenkov Avatar asked May 24 '15 13:05

Mike Krasnenkov


1 Answers

@Shepmaster's solution solves the problem locally; but you would have to specify the where T: Alias<Item=char> each time. Alternatively, you can solve it globally by requiring that all Alias implements Trait<Item=char>:

trait Alias: Trait<Item=char> {}
impl<T: Trait<Item=char>> Alias for T {}

Which of the global or local solutions is preferred is totally up to you.

like image 174
mdup Avatar answered Oct 24 '22 18:10

mdup