fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. class Wrapper
  5. {
  6. std::vector<int> const& bc;
  7. public:
  8. Wrapper(std::vector<int> const& bc) : bc(bc) { }
  9. int GetSize() const { return bc.size(); }
  10. };
  11.  
  12. class Adapter
  13. {
  14. Wrapper wrapper;
  15. public:
  16. Adapter(Wrapper&& w) : wrapper(w) { }
  17. int GetSize() const { return wrapper.GetSize(); }
  18. };
  19.  
  20. template <class T>
  21. class Mixin : public Adapter
  22. {
  23. public:
  24. //< Replace "Types ... args" with "Types& ... args" and it works!
  25. template <class ... Types>
  26. Mixin(Types ... args) : Adapter(T(args...)) { }
  27. };
  28.  
  29. int main()
  30. {
  31. std::vector<int> data;
  32. data.push_back(5);
  33. data.push_back(42);
  34. Mixin<std::vector<int>> mixin(data);
  35. std::cout << "data: " << data.size() << "\n";
  36. std::cout << "mixin: " << mixin.GetSize() << "\n";
  37. return 0;
  38. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
data:  2
mixin: 2