Hi David,

My current thinking on the matter is that eventually, I would like to
take advantage of the coherence rules to permit a program like
this. Coherence means that given a specific type T and trait U, we can
always tell whether T implements U.  This implies that we could do the
check as you described it.

However, implementing this is a bit far off. I think it is best done
as part of a general rewrite of the trait and method resolution
code. I have started that, but put it on hold to deal with #6801
(borrowck treatment of closures) and then the treatment of moves and
zeroing (#5016).

Also, I am not sure how much of this has been discussed and agreed
to. One of my longstanding "to do" items is to write up my thinking on
trait resolution as a blog post and then discuss at a meeting. You are
giving me some motivation to do that, since I'd love to be able to
point you to a fully explained blog post :)


Niko

On Thu, Sep 05, 2013 at 09:29:59AM -0700, David Renshaw wrote:
> Hi,
> 
> When I try to compile the below program, why do I get a "conflicting
> implementations" error? I do not define any implementations of Bar, so
> the parameterized impl of Foo should never get instantiated, right?
> 
> -------------------
> 
> trait Foo {
>     fn foo() -> Self;
> }
> 
> trait Bar : std::num::Zero { }
> 
> impl <T : Bar> Foo for T {
>     fn foo() -> T {
>         std::num::Zero::zero()
>     }
> }
> 
> impl Foo for u16 {
>     fn foo () -> u16 {
>         100
>     }
> }
> 
> fn main() {
> 
>     // should be 100
>     let x : u16 = Foo::foo();
>     printfln!("%s", x);
> 
> }
> 
> // error: conflicting implementations for trait `Foo`
> 
> ------------------
> 
> 
> When I asked about this on IRC, cmr indicated that this is probably
> the intended behavior of rustc, but that most people want to change
> it. Is that true, and when can we expect a fix?
> 
> 
> Thanks,
> David
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to