указатели на функции и преобразования возвращаемых типов

Предположим, у меня есть функция, которая выполняет какой-то побочный эффект, а затем возвращает ответ:

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(очевидно) удается обойти это ограничение в системе типов?

5
задан fredoverflow 2 June 2012 в 23:41
поделиться