From 263915832993dd12beee10e204f9ebcc6c786ed2 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 30 Dec 2023 23:39:37 +0100 Subject: Meta: initial commit of WestCo optimized toolchain. Signed-off-by: Amlal El Mahrouss --- .../cc2/regression-tests/mixed-forwarding.cpp2 | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 (limited to 'CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2') diff --git a/CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 b/CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 new file mode 100644 index 0000000..4415753 --- /dev/null +++ b/CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 @@ -0,0 +1,35 @@ +#include +#include + +struct X { + int i; + X(int i) : i{ i} { std::cout << "+X " << i << "\n"; } + X(X const& that) : i{that.i} { std::cout << "copy X " << i << "\n"; } + X(X && that) : i{that.i} { std::cout << "move X " << i << "\n"; } +}; + +copy_from: (copy _) = { } + +use: (_) = {} + +// invoking each of these with an rvalue std::pair argument ... +apply_implicit_forward: (forward t: std::pair) = { + copy_from(t.first); // copies + copy_from(t.second); // moves +} +apply_explicit_forward: (forward t: std::pair) = { + copy_from(forward t.first); // moves + copy_from(forward t.second); // moves +} + +main: ()->int = { + t1: std::pair = (1,2); + apply_implicit_forward(t1); + use(t1); + apply_implicit_forward(t1); + + t2: std::pair = (3,4); + apply_explicit_forward(t2); + use(t2); + apply_explicit_forward(t2); +} -- cgit v1.2.3