<div dir="ltr">Cool. I was afraid that it will be harder for the compiler to optimize away the enum, but it seems to be doing fine.<div>(If it does turn out that it's harder for the compiler, I don't see a real problem with the approach I suggested, as a runtime failure can only be caused by a bug in the code generator, not by user code)</div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 12, 2014 at 2:13 AM, Kevin Cantu <span dir="ltr"><<a href="mailto:me@kevincantu.org" target="_blank">me@kevincantu.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Matthew Monrocq suggests this improvement, which looks even cleaner to use, although slightly more complicated to implement generation of:<br>

<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 11, 2014 at 11:38 AM, Matthieu Monrocq <span dir="ltr"><<a href="mailto:matthieu.monrocq@gmail.com" target="_blank">matthieu.monrocq@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">[snip]<br><div class="gmail_extra"><div>
<div class="gmail_quote"><br></div></div><div class="gmail_quote">
I do like the idea of the trait, however I would rather do away with all the `get_aa`: why not directly wrap the parameters ?<br><br>    enum AaBbEnum {<br>        Aa(int, f64),<br>        Bb(f64),<br>    }<br>    trait AaBb {<br>



        fn get(&self) -> AaBbEnum;<div class=""><div><br>    }<br><br>    impl AaBb for (int, f64) {<br></div></div>        fn get(&self) -> AaBbEnum { match *self { (i, f) => Aa(i, f), } }<br>    }<br><br>

    impl AaBb for (f64) {<br>

        fn get(&self) -> AaBbEnum { Bb(*self) }<div class=""><div><br>    }<br>    <br>    fn overloaded<T: AaBb>(x: T) {<br></div></div>        match x.get() {<br>            Aa(i, f) => println!("got Aa: {}", (i, f)),<br>


            Bb(f) => println!("got Bb: {}", f),<div class=""><div><br>
        }<br>    }<br>    <br>    #[main]<br>    fn main() {<br>        overloaded((5i, 7.3243)); // prints: got Aa: (5, 7.3243)<br>        overloaded((3.5)); // prints: got Bb: 3.5<br>    }<br><br></div></div></div><div class="gmail_quote">



Now, there is no runtime failure => you cannot accidentally match on `Bb` and requests `get_aa`!</div></div></div></blockquote><span class="HOEnZb"><font color="#888888"><div><br></div><div><br></div><div><br></div><div>

Kevin <br></div></font></span></div><br></div></div>
</blockquote></div><br></div>