为什么此代码崩溃?
#include <iostream>
#include <functional>
int main(int argc, const char * argv[])
{
std::function<void(int)> function = [](int)
{
};
auto binding = std::bind(function, 10);
std::function<void()> jobFunctor = binding; // crashes here with EXC_BAD_ACCESS
return 0;
}
将绑定结果转换jobFunctor
为时,在std::function
构造函数中有无限的堆栈递归。
我正在运行Mac OS X 10.8.5,我使用libc ++(编译器版本)使用Xcode 5.0.2编译此代码:
LO50F-04-198BX:$ clang++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
我相当确定此代码应该可以工作,并且它是libc ++实现中的一个缺陷。
我已经在libc ++错误跟踪器上为您发布了一个错误报告。http://llvm.org/bugs/show_bug.cgi?id=18282
编辑:正如Casey指出的那样,此问题已在libc ++中修复。现在,您只需要等待Apple在即将发布的XCode / OS X版本中发布libc ++的更新版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句