Тип данных, который используется функцией swap
в алгоритме sort
, должен быть MoveAssignable
, тогда вы можете выполнить операцию, как показано ниже
CakeType c1, c2;
c1 = move(c2); // <- move c2 to c1
Но в вашем случае CakeType
имеет постоянные члены-данные. Вы можете присваивать значения постоянным элементам данных только в конструкторах. Код не может быть скомпилирован, потому что это ограничение не может генерировать оператор присваивания / копирования по умолчанию (присвоение константному члену недопустимо).
Удалите спецификатор const из определения класса, и код будет работать.
class CakeType
{
public:
unsigned int weight_;
unsigned int value_;
CakeType(unsigned int weight = 0, unsigned int value = 0) :
weight_(weight),
value_(value)
{}
};