Skip to content

Commit 02dfe26

Browse files
authored
Merge pull request #80090 from swiftlang/egorzhdan/std-string-interpolation
[cxx-interop] Conform `std::string` to `ExpressibleByStringInterpolation`
2 parents 2f30161 + e32e643 commit 02dfe26

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

stdlib/public/Cxx/std/String.swift

+9-3
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,27 @@ extension std.u32string {
8282

8383
// MARK: Initializing C++ string from a Swift String literal
8484

85-
extension std.string: ExpressibleByStringLiteral {
85+
extension std.string: ExpressibleByStringLiteral,
86+
ExpressibleByStringInterpolation {
87+
8688
@_alwaysEmitIntoClient
8789
public init(stringLiteral value: String) {
8890
unsafe self.init(value)
8991
}
9092
}
9193

92-
extension std.u16string: ExpressibleByStringLiteral {
94+
extension std.u16string: ExpressibleByStringLiteral,
95+
ExpressibleByStringInterpolation {
96+
9397
@_alwaysEmitIntoClient
9498
public init(stringLiteral value: String) {
9599
unsafe self.init(value)
96100
}
97101
}
98102

99-
extension std.u32string: ExpressibleByStringLiteral {
103+
extension std.u32string: ExpressibleByStringLiteral,
104+
ExpressibleByStringInterpolation {
105+
100106
@_alwaysEmitIntoClient
101107
public init(stringLiteral value: String) {
102108
unsafe self.init(value)

test/Interop/Cxx/stdlib/use-std-string-typechecker.swift

+3
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ import CxxStdlib
44
import StdString
55

66
let _ = HasMethodThatReturnsString().getString()
7+
8+
let x: std.string = "Hello"
9+
let y: std.string = "\(x), World!"

test/Interop/Cxx/stdlib/use-std-string.swift

+18
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ StdStringTestSuite.test("std::string <=> Swift.String") {
6565
}
6666
let swift7 = String(cxx7)
6767
expectEqual(swift7, "���")
68+
69+
let cxxLiteral: std.string = "Hello"
70+
let cxx8: std.string = "\(cxxLiteral), World!"
71+
expectEqual(cxx8.size(), 13)
72+
let swift8 = String(cxx8)
73+
expectEqual(swift8, "Hello, World!")
6874
}
6975

7076
StdStringTestSuite.test("std::string operators") {
@@ -287,6 +293,12 @@ StdStringTestSuite.test("std::u16string <=> Swift.String") {
287293
expectEqual(cxx6.size(), 7)
288294
let swift6 = String(cxx6)
289295
expectEqual(swift6, "xyz\0abc")
296+
297+
let cxxLiteral: std.u16string = "Hello"
298+
let cxx8: std.u16string = "\(cxxLiteral), World!"
299+
expectEqual(cxx8.size(), 13)
300+
let swift8 = String(cxx8)
301+
expectEqual(swift8, "Hello, World!")
290302
}
291303

292304
StdStringTestSuite.test("std::u32string <=> Swift.String") {
@@ -317,6 +329,12 @@ StdStringTestSuite.test("std::u32string <=> Swift.String") {
317329
expectEqual(cxx6.size(), 7)
318330
let swift6 = String(cxx6)
319331
expectEqual(swift6, "xyz\0abc")
332+
333+
let cxxLiteral: std.u32string = "Hello"
334+
let cxx8: std.u32string = "\(cxxLiteral), World!"
335+
expectEqual(cxx8.size(), 13)
336+
let swift8 = String(cxx8)
337+
expectEqual(swift8, "Hello, World!")
320338
}
321339

322340
StdStringTestSuite.test("std::string as Swift.CustomDebugStringConvertible") {

0 commit comments

Comments
 (0)