小编mdx*_*mdx的帖子

为什么 std::function 不参与重载决议?

我知道以下代码无法编译。

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++ 的新手)解释一下,是什么以及在哪个翻译阶段导致上述无法编译?

c++ templates translation std-function

18
推荐指数
3
解决办法
827
查看次数

标签 统计

c++ ×1

std-function ×1

templates ×1

translation ×1