在使用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
这是怎么回事?