Test copy constructor and assignment operator calls for movable types

This is the current state of play where the copy constructor and copy
assignment operators are called, even for movable types passed as
function parameters.
This commit is contained in:
William S Fulton 2022-07-08 08:01:55 +01:00
commit 1ece69cafd
4 changed files with 37 additions and 0 deletions

View file

@ -27,6 +27,8 @@ struct MoveOnly {
static MoveOnly create() { return MoveOnly(111); }
// static const MoveOnly createConst() { return MoveOnly(111); } // not supported by default
// static void take(MoveOnly mo) { if (debug) cout << "take(MoveOnly)" << " " << &mo << endl; }
};
%}
@ -48,5 +50,7 @@ struct MovableCopyable {
static MovableCopyable create() { return MovableCopyable(111); }
static const MovableCopyable createConst() { return MovableCopyable(111); }
static void take(MovableCopyable mc) { if (debug) cout << "take(MovableCopyable)" << " " << &mc << endl; }
};
%}

View file

@ -4,6 +4,8 @@ using cpp11_move_onlyNamespace;
public class cpp11_move_only_runme {
public static void Main() {
// Output
Counter.reset_counts();
using (MoveOnly mo = MoveOnly.create()) {
}
@ -19,5 +21,14 @@ public class cpp11_move_only_runme {
using (MovableCopyable mo = MovableCopyable.createConst()) {
}
Counter.check_counts(2, 1, 1, 0, 0, 3);
// Input
Counter.reset_counts();
using (MovableCopyable mo = new MovableCopyable(222)) {
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 1, 1, 0, 0, 2);
}
Counter.check_counts(2, 1, 1, 0, 0, 3);
}
}

View file

@ -14,6 +14,7 @@ public class cpp11_move_only_runme {
public static void main(String argv[]) {
// Output
{
Counter.reset_counts();
MoveOnly mo = MoveOnly.create();
@ -35,5 +36,16 @@ public class cpp11_move_only_runme {
mo.delete();
Counter.check_counts(2, 1, 1, 0, 0, 3);
}
// Input
{
Counter.reset_counts();
MovableCopyable mo = new MovableCopyable(222);
Counter.check_counts(1, 0, 0, 0, 0, 0);
MovableCopyable.take(mo);
Counter.check_counts(2, 1, 1, 0, 0, 2);
mo.delete();
Counter.check_counts(2, 1, 1, 0, 0, 3);
}
}
}

View file

@ -1,5 +1,6 @@
from cpp11_move_only import *
# Output
Counter.reset_counts()
mo = MoveOnly.create()
del mo
@ -15,3 +16,12 @@ Counter.reset_counts()
mo = MovableCopyable.createConst()
del mo
Counter.check_counts(2, 1, 1, 0, 0, 3)
# Input
Counter.reset_counts()
mo = MovableCopyable(222)
Counter.check_counts(1, 0, 0, 0, 0, 0)
MovableCopyable.take(mo)
Counter.check_counts(2, 1, 1, 0, 0, 2)
del mo
Counter.check_counts(2, 1, 1, 0, 0, 3)