C++ 11:std :: bind与lambda崩溃

Pio*_*ach 5 c++ lambda c++11

为什么这段代码会崩溃?

#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;
}
Run Code Online (Sandbox Code Playgroud)

转换绑定结果时,构造函数中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
Run Code Online (Sandbox Code Playgroud)

Bil*_*nch 6

我很确定这段代码应该可行,并且它是libc ++实现中的一个缺陷.

我在libc ++ bug跟踪器上发布了一个bug报告.http://llvm.org/bugs/show_bug.cgi?id=18282

编辑:正如凯西指出的那样,这已经在libc ++中修复了.现在,您只需要等待Apple在即将推出的XCode/OS X版本中发布更新版本的libc ++.