Двоичная операция, которую вы передаете, не имеет никакого смысла.std::make_pair
является шаблоном функции, принимающим два аргумента, поэтому вы не можете вызывать его без этих двух аргументов и не может быть создан как объект функции для передачи в std::transform
.
Вместо этого вы можете явносоздать экземпляр std::make_pair
для рассматриваемых типов шаблонов и передать его алгоритму (@RetiredNinja указал на это, но, видимо, чувствовал себя слишком ленивым, чтобы написать ответ):
std::transform(boolRealLabel.cbegin(), boolRealLabel.cend(),
boolPredLabel.cbegin(), TrPrPair.begin(), std::make_pair<bool, bool>);
Два других часто встречающихся варианта - этолямбда,
std::transform(boolRealLabel.cbegin(), boolRealLabel.cend(), boolPredLabel.cbegin(),
TrPrPair.begin(), [](bool a, bool b){ return std::make_pair(a, b); });
или указатель на функцию
std::pair<bool, bool> toPair(bool a, bool b)
{
return std::make_pair(a, b);
}
std::transform(boolRealLabel.cbegin(), boolRealLabel.cend(),
boolPredLabel.cbegin(), TrPrPair.begin(), toPair);
А для полноты cppreference на std::transform
и ее аргумент двоичной операции (относится только кперегрузка, действующая на два входных диапазона):
binary_op - объект функции двоичной операции, который будет применен.
Подпись функции должна быть эквивалентна следующей:
Ret fun(const Type1 &a, const Type2 &b);