考虑一些代码:
{{1}}
如何才能使这个例子明确无误?
答案 0 :(得分:2)
您遇到的问题是允许std::function<void(Args...)>
放弃返回类型 - 因此std::function<void()>
和std::function<bool()>
都可以从bool(*)()
构建。后者将从bar
返回,但前者将丢弃它。这是完全有效的行为,但导致这种行为含糊不清。
你可能想要的是完全避免std::function
:
template <class F>
void operator=(F f) { f(); }