Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions proposals/0499-support-non-copyable-simple-protocols.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,17 @@ extension Comparable where Self: ~Copyable & ~Escapable {
protocol Hashable: Equatable & ~Copyable & ~Escapable { }

struct Hasher {
mutating func combine<H: Hashable & ~Copyable & ~Escapable>(_ value: borrowing H)
mutating func combine<
H: Hashable & ~Copyable & ~Escapable
>(_ value: borrowing H)
}

extension Optional: Equatable where Wrapped: Equatable & ~Copyable & ~Escapable {
public static func ==(lhs: borrowing Wrapped?, rhs: borrowing Wrapped?) -> Bool {
extension Optional: Equatable
where Wrapped: Equatable & ~Copyable & ~Escapable
{
public static func ==(
lhs: borrowing Wrapped?, rhs: borrowing Wrapped?
) -> Bool
}

extension Optional: Hashable where Wrapped: Hashable & ~Copyable & ~Escapable {
Expand All @@ -92,10 +98,25 @@ protocol TextOutputStreamable: ~Copyable & ~Escapable { }
protocol CustomStringConvertible: ~Copyable, ~Escapable { }
protocol CustomDebugStringConvertible: ~Copyable, ~Escapable { }

extension Result: Equatable where Success: Equatable & ~Copyable, Failure: Equatable {
extension String {
public init<
Subject: CustomStringConvertible & ~Copyable & ~Escapable
>(describing instance: borrowing Subject)

public init<
Subject: TextOutputStreamable & ~Copyable & ~Escapable
>(describing instance: borrowing Subject)
}

extension Result: Equatable
where Success: Equatable & ~Copyable, Failure: Equatable
{
public static func ==(lhs: borrowing Self, rhs: borrowing Self) -> Bool
}

extension Result: Hashable
where Success: Hashable & ~Copyable & ~Escapable, Failure: Hashable { }

extension DefaultStringInterpolation
mutating func appendInterpolation<T>(
_ value: borrowing T
Expand Down