当我取消注释条件表达式时,程序将无法在visual c ++ 2008下编译。
#include <iostream>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
typedef boost::function<void(int, int)> vii_t;
typedef boost::function<void(int)> vi_t;
void foo(int a, int b){}
void bar(int a){}
int main(int argc, char* argv[])
{
//vi_t test= true ? boost::bind(foo, _1, 100) : boost::bind(bar, _1);
vi_t test1 = boost::bind(foo, _1, 100);
vi_t test2 = boost::bind(bar, _1);
//test(1);
test1(1);
test2(1);
return 0;
}
答案 0 :(得分:1)
在表达式c ? x : y
中,x和y必须属于同一类型,或者必须可转换为另一个。这种常见类型是整个表达式的类型。
据推测,具有不同参数数量的boost::bind
会返回不可相互转换的不同类型。它们都可以转换为vi_t
并没有帮助。