我知道以下代码无法编译。
void baz(int i) { }
void baz() { }
class Bar
{
std::function<void()> bazFn;
public:
Bar(std::function<void()> fun = baz) : bazFn(fun){}
};
int main(int argc, char **argv)
{
Bar b;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为std::function据说不考虑重载决议,正如我在另一篇文章中读到的。
我不完全理解迫使这种解决方案的技术限制。
我在 cppreference 上阅读了翻译和模板的阶段,但我想不出任何我找不到反例的推理。向半个外行(C++ 的新手)解释一下,是什么以及在哪个翻译阶段导致上述无法编译?