Use Ref
for generic type parameters
#3435
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Now that
Ref
no longer requires a lifetime parameter #3433 we can use it in a trait as a type alias and generalize the concept of a reference or input parameter for generic WinRT types. This solves a longstanding problem with generic type parameters where they were generated as references "just in case" since there was no way to know whether it would be specialized with a copyable or non-copyable type.So now whether you're implementing specializations of
IVector<T>
or writing a closure forTypedEventHandler<Sender, Result>
, you can directly use the generic type arguments without having to indirect through a reference. For generic implementations - implementations that have to deal with any kind ofT
- you can use theType::deref
helper to convert aT::Ref
into a&T::Default
for efficient but generic handling of type parameters.This also gets us closer to resolving #3233 and #1339.