comp
является параметром типа, что означает comp
обозначает тип, а не объект. lower_bound
ожидает функциональный объект, а не тип функционального объекта, поэтому вы получите ошибку. Чтобы «преобразовать» тип в объект, вам нужно
lower = lower_bound(internal.begin(), internal.end(), elem, comp{});
Где comp{}
создает объект типа comp
.
В противном случае вы можете сделать comp
член в вашем наборе, как
template <class T, class comp>
class set
{
private:
comp cmp{};
// ...
public:
set(comp cmp) : cmp(cmp)
// ...
void set_method(const T &elem)
{
auto lower = lower_bound(internal.begin(), internal.end(), elem, cmp);
}
};