В аналогичных вопросах (например, здесь ) отмечалось, что вы не можете передавать указатели методов класса в качестве предикатов на std::all_of
.
Однако с C ++ 17 мы имеемstd::invoke
, что должно облегчить std::all_of
и аналогичным функциям принятие указателей на функции-члены (и даже переменные-члены).
Точнее, в GCC 9.2 следующее не компилируется:
#include <algorithm>
#include <vector>
struct S {
bool check() const { return true; }
};
int main() {
std::vector<S> vs;
std::all_of(vs.begin(), vs.end(), &S::check);
}
Эта ссылка Годболта содержит пример кода и игрушечную версию all_of
с использованием invoke.
Почему это ограничение? Я что-то пропустил? Я представлял, что когда стандартизировали std::invoke
, его также следует применять к соответствующим функциям STL.