diff --git a/stdlib/public/Cxx/CxxOptional.swift b/stdlib/public/Cxx/CxxOptional.swift index 456788370bcb5..24387c04e3318 100644 --- a/stdlib/public/Cxx/CxxOptional.swift +++ b/stdlib/public/Cxx/CxxOptional.swift @@ -27,8 +27,9 @@ extension CxxOptional { } @inlinable - public var value: Wrapped { + public var value: Wrapped? { get { + guard hasValue else { return nil } return pointee } } diff --git a/test/Interop/Cxx/stdlib/use-std-optional.swift b/test/Interop/Cxx/stdlib/use-std-optional.swift index 266d35adbf1b5..7d4c5540be097 100644 --- a/test/Interop/Cxx/stdlib/use-std-optional.swift +++ b/test/Interop/Cxx/stdlib/use-std-optional.swift @@ -29,10 +29,11 @@ StdOptionalTestSuite.test("std::optional => Swift.Optional") { StdOptionalTestSuite.test("std::optional hasValue/value") { let nonNilOpt = getNonNilOptional() expectTrue(nonNilOpt.hasValue) - expectEqual(123, nonNilOpt.value) + expectEqual(123, nonNilOpt.value!) let nilOpt = getNilOptional() expectFalse(nilOpt.hasValue) + expectNil(nilOpt.value) } runAllTests()