C++ std::绑定到lambda:编译错误

C++ std::绑定到lambda:编译错误,c++,c++11,lambda,initializer-list,stdbind,c++17,C++,C++11,Lambda,Initializer List,Stdbind,C++17,我在尝试将std::bind绑定到lambda时遇到错误。以下代码示例编译得很好: #include <functional> #include <iostream> int main() { const auto lambda1 = [](int a, int b){ return a + b; }; std::cout << (std::bind( lambda1, std::placeholders::_1, 2))(2)

我在尝试将
std::bind
绑定到lambda时遇到错误。以下代码示例编译得很好:

#include <functional>
#include <iostream>

int main()
{
    const auto lambda1 = [](int a, int b){ return a + b; };

    std::cout << (std::bind( lambda1, std::placeholders::_1, 2))(2)
              << std::endl;

    return 0;
}
#包括
#包括
int main()
{
常量auto lambda1=[](inta,intb){返回a+b;};
std::cout-----已启动构建:项目:Project1,配置:调试Win32------
1> main.cpp
1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\xrefwrap(58):错误C2064:term不计算为包含2个参数的函数
1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\xrefwrap(118):请参阅正在编译的类模板实例化“std::\u Result\u of”的参考
1> 与
1>          [
1> \u Fty=std::初始值设定项\u列表
1>          ]
1> C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC\include\functional(975):请参阅正在编译的类模板实例化“std::result\u of”的参考
1> 与
1>          [
1> \u Funx=std::初始值设定项\u列表
1>          ]
1> cpp(23):请参阅对正在编译的类模板实例化“std::_Do_call_ret”的引用
1> 与
1>          [
1> _Ret=无效
1>          ]
======生成:0成功,1失败,0最新,0跳过==========
发生了什么事?似乎与初始值设定项列表有某种混淆,但我不确定原因。

之前,
auto foo{x};
创建了一个类型为
x
的元素的初始化列表

const auto lambda2 { [](int a, int b){ return a + b; } };
所以这个
lambda2
不是lambda,它是lambda的初始值设定项列表


这是在中修复的,可能会作为缺陷追溯应用。这非常令人惊讶。

@TheDude•是的,希望std::bind能像std::auto_ptr那样。这在当时很好,但现在对于lambda来说是不必要的。
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>  main.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xrefwrap(58): error C2064: term does not evaluate to a function taking 2 arguments
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xrefwrap(118) : see reference to class template instantiation 'std::_Result_of<_Fty,int &,int &>' being compiled
1>          with
1>          [
1>              _Fty=std::initializer_list<main::<lambda_55c00b1d5f4fcd1ad46b46ad921a2385>>
1>          ]
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional(975) : see reference to class template instantiation 'std::result_of<_Funx (int &,int &)>' being compiled
1>          with
1>          [
1>              _Funx=std::initializer_list<main::<lambda_55c00b1d5f4fcd1ad46b46ad921a2385>>
1>          ]
1>          main.cpp(23) : see reference to class template instantiation 'std::_Do_call_ret<false,_Ret,std::initializer_list<main::<lambda_55c00b1d5f4fcd1ad46b46ad921a2385>>,std::tuple<std::_Ph<1>,int>,std::tuple<int &>,std::_Arg_idx<0,1>>' being compiled
1>          with
1>          [
1>              _Ret=void
1>          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
const auto lambda2 { [](int a, int b){ return a + b; } };