diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2023-12-30 23:39:37 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2023-12-30 23:39:37 +0100 |
| commit | 263915832993dd12beee10e204f9ebcc6c786ed2 (patch) | |
| tree | 862e51208a99c35746e574a76564a4532b3a4a49 /CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 | |
Meta: initial commit of WestCo optimized toolchain.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2')
| -rw-r--r-- | CompilerDriver/cc2/regression-tests/mixed-forwarding.cpp2 | 35 |
1 files changed, 35 insertions, 0 deletions
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 <iostream> +#include <utility> + +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<X, X>) = { + copy_from(t.first); // copies + copy_from(t.second); // moves +} +apply_explicit_forward: (forward t: std::pair<X, X>) = { + copy_from(forward t.first); // moves + copy_from(forward t.second); // moves +} + +main: ()->int = { + t1: std::pair<X,X> = (1,2); + apply_implicit_forward(t1); + use(t1); + apply_implicit_forward(t1); + + t2: std::pair<X,X> = (3,4); + apply_explicit_forward(t2); + use(t2); + apply_explicit_forward(t2); +} |
