fun*_*mmy 2 c++ boost boost-fusion visual-studio-2013
尝试boost::fusion::invoke
在boost-1.56中编译以下调用在Visual Studio 2013中失败,但在使用Visual Studio 2012进行编译时没有错误.
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/fusion/functional.hpp>
void Function( int & output )
{
output = 12;
}
int main( int, char ** )
{
boost::fusion::vector1< int > parameters;
boost::function< void( int & ) > function = &Function;
boost::fusion::invoke( function, parameters );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器输出是:
boost\fusion\functional\invocation\invoke.hpp(205): error C2039: 'type' : is not a member of 'boost::result_of<Function (const int &)>'
with
[
Function=boost::function<void (int &)>
]
boost\fusion\functional\invocation\invoke.hpp(163) : see reference to class template instantiation 'boost::fusion::detail::invoke_impl<boost::function<void (int &)>,Sequence,1,false,true>' being compiled
with
[
Sequence=const boost::fusion::vector1<int>
]
main.cpp(16) : see reference to class template instantiation 'boost::fusion::result_of::invoke<boost::function<void (int &)>,const boost::fusion::vector1<int>>' being compiled
Run Code Online (Sandbox Code Playgroud)
尝试使用const Sequence实例化boost :: result_of时失败了.我查看了boost\fusion\functional\invocation\invoke.hpp,并且有两个boost :: fusion :: invoke的重载,一个是const,另一个是非const.
我认为Visual Studio 2013编译器试图实例化const版本,即使这不是应该调用的版本.如果我在invoke.hpp中注释掉const版本,那么这个例子编译得很好.
这是Visual Studio 2013或boost-1.56的错误吗?
如果不修改增强源,是否有解决此问题的方法?
我怀疑VS2013的BOOST_RESULT_OF默认值已经改变.
#define BOOST_RESULT_OF_USE_TR1
Run Code Online (Sandbox Code Playgroud)
让它编译.这个bug有可能已知并且已在trunk中修复,但您可能还想报告它
归档时间: |
|
查看次数: |
586 次 |
最近记录: |