Skip to content

Commit 3505175

Browse files
authored
Merge pull request #42149 from zoecarver/docs/interop-oddities
2 parents e712c7e + 637bb90 commit 3505175

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# C++ Interoperability Oddities
2+
3+
C++ APIs may have slightly different behavior than other C++ APIs. This is a general catch-all document where these
4+
oddities are recorded along with a few other things that are good to know when using C++ interop.
5+
6+
**Parameters with reference types**
7+
8+
Parameters that have mutable reference types are bridged as inout. Parameters with immutable reference types (const ref)
9+
are bridged as value types. ⚠️ This will change as soon as Swift has a way to represent immutable borrows. ⚠️
10+
11+
**Lifetimes**
12+
13+
Currently, lifetimes are extended to the end of the lexical scope if any unsafe pointers are used in that scope. TODO:
14+
this should be updated to extend lifetimes whenever a C++ type is used in that scope. Currently, if there is no
15+
unsafe pointer used in teh scope, then normal Swift lifetime rules apply.
16+
17+
**Borrowing Self**
18+
19+
For mutating methods, self is borrowed and the access to self lasts for the duration of the call. For non-mutating
20+
methods, the access to self is currently instantanious. ⚠️ In the very near future we plan to borrow self in both cases.
21+
This will be a source breaking change from what native Swift methods do. ⚠️
22+
23+
_More to come soon :)_

0 commit comments

Comments
 (0)