boost :: fusion ::使用Visual Studio 2013调用编译器错误

fun*_*mmy 2 c++ boost boost-fusion visual-studio-2013

尝试boost::fusion::invokeboost-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 2013boost-1.56的错误吗?

如果不修改增强源,是否有解决此问题的方法?

seh*_*ehe 5

我怀疑VS2013的BOOST_RESULT_OF默认值已经改变.

#define BOOST_RESULT_OF_USE_TR1
Run Code Online (Sandbox Code Playgroud)

让它编译.这个bug有可能已知并且已在trunk中修复,但您可能还想报告它