std :: function需要地址才能在vs2012上起作用?

时间:2018-10-31 17:43:55

标签: c++ visual-studio-2012

在使用std :: function时,我发现了这种奇怪的行为。 下面的代码在VS2012上编译时没有警告,但是在执行时,type_traits函数forward中存在内存访问冲突。

typedef std::function<void()> Func;

void defaultFunc() { /* no-op */ }

int main(int argc, const char** argv)
{
  Func f = argc == 0 ? Func() : defaultFunc; // crash
  return 0;
}

我仔细检查了gnu g ++ 4.9.2,该问题没有重现该问题。

如果我在默认函数中添加一个与号,则一切正常:

Func f = argc == 0 ? Func() : &defaultFunc; // works

如果我删除三元条件,它将按预期工作。

Func f = defaultFunc; // works

这是怎么回事?

0 个答案:

没有答案