> On Mar 1, 2017, at 1:55 AM, Jonathan Hull <[email protected]> wrote:
> 
> What I would like is a way to specialize a generic function in a block of 
> code: (Strawman syntax)
> 
>       if T is Int.self {
>               //In this block of code T == Int
>       }
> 
> It seems to me that the compiler might even be able to optimize this without 
> a branch.  If there is a return in the block, then it might even be able to 
> throw away all the code after it for the Int version of the function.

We’ve been calling this “type refinement”. Essentially, within some lexical 
context (the “if” here) we can assert additional properties on a type or one 
specific (constant) values and take advantage of those properties, as you’ve 
done with T == Int.

It’s a plausible language feature, and could be useful. There’s certainly some 
precedent for it: C++17 adds something similar with “constexpr if”, albeit in 
their non-separately-type-checked template instantiation model.

It’s a nontrivial language feature that’s well out of scope for Swift 4.

        - Doug

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to