// RUN: %target-swift-frontend -O -emit-sil -verify %s public struct Foo { @Clamped(0...1) public var value: Double = 1.0 } @propertyWrapper public struct Clamped { public init(wrappedValue: WrappedValue, _ range: ClosedRange) { self.range = range self._wrappedValue = wrappedValue.clamped(to: range) } public let range: ClosedRange private var _wrappedValue: WrappedValue public var wrappedValue: WrappedValue { get { _wrappedValue } set { _wrappedValue = newValue.clamped(to: range) } } } public extension Comparable { func clamped(to range: ClosedRange, exceptions: Self...) -> Self { clamped(to: range, exceptions: exceptions) } func clamped(to range: ClosedRange, exceptions: any Collection) -> Self { return exceptions.contains(self) ? self : max(range.lowerBound, min(range.upperBound, self)) } mutating func clamp(to range: ClosedRange, exceptions: Self...) { clamp(to: range, exceptions: exceptions) } mutating func clamp(to range: ClosedRange, exceptions: any Collection) { self = self.clamped(to: range, exceptions: exceptions) } }