Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 10:49:33

0001 /*
0002  *  CMSSW
0003  *
0004  */
0005 
0006 #include <cassert>
0007 #include <iostream>
0008 #include <memory>
0009 #include <vector>
0010 
0011 #include "DataFormats/Common/interface/Wrapper.h"
0012 
0013 class CopyNoMove {
0014 public:
0015   CopyNoMove() {}
0016   CopyNoMove(CopyNoMove const&) { /* std::cout << "copied\n"; */
0017   }
0018   CopyNoMove& operator=(CopyNoMove const&) { /*std::cout << "assigned\n";*/
0019     return *this;
0020   }
0021 
0022 private:
0023 };
0024 
0025 class MoveNoCopy {
0026 public:
0027   MoveNoCopy() {}
0028   MoveNoCopy(MoveNoCopy const&) = delete;
0029   MoveNoCopy& operator=(MoveNoCopy const&) = delete;
0030   MoveNoCopy(MoveNoCopy&&) { /* std::cout << "moved\n";*/
0031   }
0032   MoveNoCopy& operator=(MoveNoCopy&&) { /* std::cout << "moved\n";*/
0033     return *this;
0034   }
0035 
0036 private:
0037 };
0038 
0039 void work() {
0040   auto thing = std::make_unique<CopyNoMove>();
0041   edm::Wrapper<CopyNoMove> wrap(std::move(thing));
0042 
0043   auto thing2 = std::make_unique<MoveNoCopy>();
0044   edm::Wrapper<MoveNoCopy> wrap2(std::move(thing2));
0045 
0046   auto thing3 = std::make_unique<std::vector<double>>(10, 2.2);
0047   assert(thing3->size() == 10);
0048 
0049   edm::Wrapper<std::vector<double>> wrap3(std::move(thing3));
0050   assert(wrap3->size() == 10);
0051   assert(thing3.get() == 0);
0052 }
0053 
0054 int main() {
0055   int rc = 0;
0056   try {
0057     work();
0058   } catch (...) {
0059     rc = 1;
0060     std::cerr << "Failure: unidentified exception caught\n";
0061   }
0062   return rc;
0063 }