fork download
  1. #include <utility>
  2. #include <iostream>
  3.  
  4. template<class T>
  5. T& assign(T& t1, const T& t2)
  6. {
  7. void* ptr = &t1;
  8. t1.~T();
  9. return *new(ptr) T(t2);
  10. }
  11.  
  12. int main()
  13. {
  14. int i = 0;
  15. auto l1 = [=](int v) mutable { if(!i) i = v; std::cout << "\ni = " << i ; };
  16. auto l2(l1);
  17. l1(1);
  18. l2(2);
  19. std::cout << "\nassign:";
  20. assign(l1, l2);
  21. l1(1);
  22. l2(2);
  23. }
  24.  
Success #stdin #stdout 0s 2928KB
stdin
Standard input is empty
stdout
i = 1
i = 2
assign:
i = 2
i = 2