Thinking about @autoclosure being a wrapper…
It is impossible to use projected ("API-level") arguments with operators, correct? (Operators are not mentioned in the proposal.)
@propertyWrapper public struct Get<Value> {
public var wrappedValue: Value { projectedValue() }
public var projectedValue: () -> Value
public init(wrappedValue: @autoclosure @escaping () -> Value) {
projectedValue = wrappedValue
}
public init(projectedValue: @escaping () -> Value) {
self.projectedValue = projectedValue
}
}
prefix func +(@Get _: Void) { }
+() // compiles
+($-something?)
I think, if functions with wrapped parameters that omit argument labels could be referenced, as proposed, we would be able to at least use that overload as a closure?
((+) as (() -> Void) -> Void) { }
(+) { }
(&&)(true) { false }