Предположим, у меня есть функция, которая выполняет какой-то побочный эффект, а затем возвращает ответ:
int foo()
{
perform_some_side_effect();
return 42;
}
Я хочу связать foo
к указателю на функцию, но меня не интересует ответ, а только побочный эффект:
void (*bar)() = foo;
Однако, похоже, это ошибка типа:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
В чем причина этой ошибки? Почему система типов не позволяет мне игнорировать ответ?
Кстати, это работает, если я оборачиваю указатель функции в std::function
:
std::function<void()> baz = foo;
Как std::function
(очевидно) удается обойти это ограничение в системе типов?