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
Refno 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::derefhelper to convert aT::Refinto a&T::Defaultfor efficient but generic handling of type parameters.This also gets us closer to resolving #3233 and #1339.