File tree Expand file tree Collapse file tree 1 file changed +23
-0
lines changed Expand file tree Collapse file tree 1 file changed +23
-0
lines changed Original file line number Diff line number Diff line change
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 :)_
You can’t perform that action at this time.
0 commit comments