annotate 3rdparty/vmime/cmake/cmake-cxx11/Modules/CheckCXX11Features/cxx11-test-rvalue-references.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 #include <cassert>
ferencd@0 2
ferencd@0 3 class rvmove {
ferencd@0 4 public:
ferencd@0 5 void *ptr;
ferencd@0 6 char *array;
ferencd@0 7
ferencd@0 8 rvmove()
ferencd@0 9 : ptr(0),
ferencd@0 10 array(new char[10])
ferencd@0 11 {
ferencd@0 12 ptr = this;
ferencd@0 13 }
ferencd@0 14
ferencd@0 15 rvmove(rvmove &&other)
ferencd@0 16 : ptr(other.ptr),
ferencd@0 17 array(other.array)
ferencd@0 18 {
ferencd@0 19 other.array = 0;
ferencd@0 20 other.ptr = 0;
ferencd@0 21 }
ferencd@0 22
ferencd@0 23 ~rvmove()
ferencd@0 24 {
ferencd@0 25 assert(((ptr != 0) && (array != 0)) || ((ptr == 0) && (array == 0)));
ferencd@0 26 delete[] array;
ferencd@0 27 }
ferencd@0 28
ferencd@0 29 rvmove &operator=(rvmove &&other)
ferencd@0 30 {
ferencd@0 31 delete[] array;
ferencd@0 32 ptr = other.ptr;
ferencd@0 33 array = other.array;
ferencd@0 34 other.array = 0;
ferencd@0 35 other.ptr = 0;
ferencd@0 36 return *this;
ferencd@0 37 }
ferencd@0 38
ferencd@0 39 static rvmove create()
ferencd@0 40 {
ferencd@0 41 return rvmove();
ferencd@0 42 }
ferencd@0 43 private:
ferencd@0 44 rvmove(const rvmove &);
ferencd@0 45 rvmove &operator=(const rvmove &);
ferencd@0 46 };
ferencd@0 47
ferencd@0 48 int main()
ferencd@0 49 {
ferencd@0 50 rvmove mine;
ferencd@0 51 if (mine.ptr != &mine)
ferencd@0 52 return 1;
ferencd@0 53 mine = rvmove::create();
ferencd@0 54 if (mine.ptr == &mine)
ferencd@0 55 return 1;
ferencd@0 56 return 0;
ferencd@0 57 }