Я ссылаюсь на двоичный предикат Compare comp
, ожидаемый при перегрузке std :: lower_bound и т. Д.:
Описание гласит:
Сигнатура функции предиката должна быть эквивалентна следующей:
bool pred (const Type1 & a, const Type2 & b);
В то время как подпись не должна иметь const &, функцияне должен изменять объекты, переданные ему, и должен иметь возможность принимать все значения типа (возможно, const) Type1 и Type2 независимо от категории значения (таким образом, Type1 & не допускается, равно как и Type1, если для Type1 перемещение не эквивалентноcopy (начиная с C ++ 11)).
Меня немного смущает следующая часть описания (что кажется противоречивым?):
. ..функция не должна изменять переданные ей объекты и должна иметь возможность принимать все значения типа (возможно, const) Type1 и Type2 независимо от категории значения (таким образом, Type1 & не допускается, равно как и Type1, если только для Type1перемещение эквивалентно копии (начиная с C ++ 11))
Если функция должна принимать все категории значений, почему Type1
не допускается? Кроме того, почему move
должно быть эквивалентно copy
для Type1
, поскольку C ++ 11?