consume x
_ = consume y
doStuffUniquely(with: consume x)
copy x
_ = copy x
doStuff(with: copy x)

struct MoveOnly: ~Copyable {}

struct B: P {
  func foo(x: borrowing Foo, y: consuming Foo)
}
func foo(_: borrowing Foo)
func foo(_: consuming Foo)
func foo(_: inout Foo)
let f: (borrowing Foo) -> Void = { a in a.foo() }
let f: (consuming Foo) -> Void = { a in a.foo() }
let f: (inout Foo) -> Void = { a in a.foo() }
struct Foo {
  consuming func foo()
  borrowing func foo()
  mutating func foo()
}