升压::功能FAQ item 3专门针对我感兴趣的场景:可以tr1 ::函数swallow返回值吗?
为什么有解决方法的空白 回报? C++允许他们!空返回 由C++标准允许的,如在 此代码段:
void f(); void g() { return f(); }
这是 升压::函数的一个有效的使用,因为空返回 不被使用。随着空返回,我们 会试图编译形成不良的类似 代码:
int f(); void g() { return f(); }
在本质上,没有使用的空返回 允许的boost ::功能吞下 返回值。这与 一致,允许用户分配和调用 功能和功能对象与 参数不完全匹配。
不幸的是,这并不在VS2008工作:
int Foo();
std::tr1::function<void()> Bar = Foo;
这将产生错误的开始:
c:\Program Files\Microsoft Visual Studio 9.0\VC\include\xxcallfun(7) : error C2562: 'std::tr1::_Callable_fun<_Ty>::_ApplyX' : 'void' function returning a value
这是VS2008的TR1实现的失败?这在VS2010中工作吗? TR1是否可以解决这个问题?怎么样C++ 0x?
VS2010给出了同样的错误。 – Xeo
'void g(){return f(); }'可以支持模板代码,其中函数的返回类型可能不会事先知道......如果'g()'不是,那么'f()'实际返回一个值仍然是错误的。鉴于此,我不会惊讶地发现标准委员会选择与Boost在这方面的实施不同,因为它提供了更直观的行为。但由于gcc *允许这种行为,所以我不积极。 –