#include <iostream>
#include <vector>

class Wrapper
{
  std::vector<int> const& bc;
public:
  Wrapper(std::vector<int> const& bc) : bc(bc) { }
  int GetSize() const { return bc.size(); }
};

class Adapter
{
  Wrapper wrapper;
public:
  Adapter(Wrapper&& w) : wrapper(w) { }
  int GetSize() const { return wrapper.GetSize(); }
};

template <class T>
class Mixin : public Adapter
{
public:
  //< Replace "Types ... args" with "Types& ... args" and it works!
  template <class ... Types>
  Mixin(Types ... args) : Adapter(T(args...)) { }
};

int main()
{
  std::vector<int> data;
  data.push_back(5);
  data.push_back(42);
  Mixin<std::vector<int>> mixin(data);
  std::cout << "data:  " << data.size() << "\n";
  std::cout << "mixin: " << mixin.GetSize() << "\n";
  return 0;
}