From 6c9d141c84ac73b14edd1f9dc6c0cf7819b15206 Mon Sep 17 00:00:00 2001 From: Egor Zhdan Date: Fri, 5 May 2023 20:58:00 +0100 Subject: [PATCH] [cxx-interop] Make `std.optional.value` nullable rdar://109356566 / resolves https://github.com/apple/swift/issues/65918 (cherry picked from commit 7d7825591d63176643a7200bab0b774d9e14a0fb) --- stdlib/public/Cxx/CxxOptional.swift | 3 ++- test/Interop/Cxx/stdlib/use-std-optional.swift | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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()