On Fri, Jul 25, 2014 at 10:34 AM, Patrick Walton <[email protected]> wrote:
> On 7/25/14 10:10 AM, Josh Haberman wrote: > >> On Fri, Jul 25, 2014 at 10:04 AM, Patrick Walton <[email protected]> >> wrote: >> >>> Neither auto-ref or ad-hoc operator overloading >>> would let you write a generic function that calls >>> `pow` and works optimally with both bigints and >>> ints. I think the only thing that would work is >>> something like C++ ad-hoc templates, which is >>> a road I don't want to go down. >>> >> >> Could you explain what you mean by "ad-hoc templates", and how this >> differs from Rust's templates? >> > > In Rust you can never have type errors during template expansion. If a > call to a generic/template typechecks properly, then the template is > guaranteed to expand to valid Rust code with no type errors within it. This > is done via the trait system, which is similar in spirit to the concept > systems proposed for C++17 (the difference being that Rust *only* has > concepts). > Got it. So the "ad hoc" part refers to having a template parameter, but not being able to check its capabilities/interface at template parsing/typechecking time, it sounds like? How does the trait/concept approach preclude template specialization? Each template specialization could be independently type-checked, but the most specialized one could be selected at instantiation time. Or is this considered "overloading" and discarded because of the extra complexity? I guess it could be complicated to define which was "most specialized."
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
