diff --git a/test/Interop/Cxx/stdlib/Inputs/module.modulemap b/test/Interop/Cxx/stdlib/Inputs/module.modulemap index 57f7eae3bb670..3db778f6690f4 100644 --- a/test/Interop/Cxx/stdlib/Inputs/module.modulemap +++ b/test/Interop/Cxx/stdlib/Inputs/module.modulemap @@ -76,6 +76,12 @@ module StdFunction { export * } +module StdVariant { + header "std-variant.h" + requires cplusplus + export * +} + module NoCXXStdlib { header "no-cxx-stdlib.h" requires cplusplus diff --git a/test/Interop/Cxx/stdlib/Inputs/std-variant.h b/test/Interop/Cxx/stdlib/Inputs/std-variant.h new file mode 100644 index 0000000000000..8c8f122d126a7 --- /dev/null +++ b/test/Interop/Cxx/stdlib/Inputs/std-variant.h @@ -0,0 +1,16 @@ +#include +#include + +using StdVariantIntOrString = std::variant; +inline StdVariantIntOrString getStdVariantInt() { return {123}; } +inline StdVariantIntOrString getStdVariantString() { return {"abc"}; } + +struct HasDeletedCopyCtor { + int value; + HasDeletedCopyCtor(int value) : value(value) {} + HasDeletedCopyCtor(const HasDeletedCopyCtor &other) = delete; + HasDeletedCopyCtor(HasDeletedCopyCtor &&other) = default; +}; + +using StdVariantIntOrNonCopyable = std::variant; +inline StdVariantIntOrNonCopyable getStdVariantNonCopyable() { return HasDeletedCopyCtor(123); } diff --git a/test/Interop/Cxx/stdlib/use-std-variant.swift b/test/Interop/Cxx/stdlib/use-std-variant.swift new file mode 100644 index 0000000000000..91ffbd905ed06 --- /dev/null +++ b/test/Interop/Cxx/stdlib/use-std-variant.swift @@ -0,0 +1,22 @@ +// RUN: %target-run-simple-swift(-I %S/Inputs -cxx-interoperability-mode=upcoming-swift -Xcc -std=c++17) + +// REQUIRES: executable_test + +import StdlibUnittest +import StdVariant +import CxxStdlib + +var StdVariantTestSuite = TestSuite("StdVariant") + +StdVariantTestSuite.test("index()") { + let variantInt = getStdVariantInt() + expectEqual(variantInt.index(), 0) + + let variantString = getStdVariantString() + expectEqual(variantString.index(), 1) + + let variantNonCopyable = getStdVariantNonCopyable() + expectEqual(variantNonCopyable.index(), 0) +} + +runAllTests()