Perfect forwarding

Если у нас есть следующее:

template <class T>
struct B{
  T data;
}

struct A{
  int data_array[100];
}

int main()
{
  A x;
  const A x_const;

  auto y1 = f(A());
  auto y2 = f(x);
  auto y3 = f(x_const);
  auto y4 = f(std::move(x));
}

Я хочу знать f (желательно функцию, но макрос также подходит) такую, что:

decltype(y1) == B<A>
decltype(y2) == B<A&>
decltype(y3) == B<const A&>
decltype(y4) == B<A&&>

То есть f идеально перенаправляет x в объект B .

5
задан Xeo 9 February 2012 в 23:42
поделиться