いくつかの副作用を実行してから答えを返す関数があるとします。
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
型システムでこの制限を(どうやら)回避する方法はありますか?