Consider the following:
struct X { Y y_; X(const Y & y) :y_(y) {} X(Y && y) :y_(std::move(y)) {} };
Is it necessar
Yes, it is necessary. A const ref can only be a copy, not a move.