S
Size: a a a
S
S
S
В
В
В
IS
enum O<T> { case none, some(T) }
protocol Addictable { static func +(l: Self, r: Self) -> Self }
func s<T>(_ a: O<T>, _ b: O<T>) -> O<T> where T: Addictable {
switch (a, b) {
case let (.some(aa), .some(bb)): return O<T>.some(aa + bb)
default: return .none
}
}
// magic is here
extension Int: Addictable { }
let v1 = O.some(123)
let v2 = O.some(234)
s(v1, v2) // 357
В
В
S
В
В
IS
В
S
В
IS