Как вы определили, проблема в том, что ваш шаблон ожидает тип (потому что вы его написали именно так), и хотя std::plus
является типом (функтором), std::sqrt
- это функция.
Трудно дать конкретное решение вашей проблемы, потому что вы никогда не показывали свое использование Op
.
Но, как правило, это легко сделать с помощью auto
параметр шаблона:
template <auto Op>
float foo(const float boo) {
return Op(boo);
}
Если ваша версия C ++ слишком старая, вам нужно будет добавить версию, которая принимает вместо нее указатель на функцию.