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

boost::fusion::invoke compiler error with Visual Studio 2013

本文关键字:编译器 错误 2013 Visual fusion 调用 boost Studio      更新时间:2023-10-16

尝试在boost-1.56中编译以下对boost::fusion::invoke的调用在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;
}

编译器输出为:

boostfusionfunctionalinvocationinvoke.hpp(205): error C2039: 'type' : is not a member of 'boost::result_of<Function (const int &)>'
    with
    [
        Function=boost::function<void (int &)>
    ]
    boostfusionfunctionalinvocationinvoke.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

尝试用constSequence实例化boost::result_of时失败。我查看了boost\fusion\functional\invocation\invoke.hpp,发现boost::fusion::invoke有两个重载,一个是const,另一个是nonconst。

我认为Visual Studio 2013编译器正在尝试实例化const版本,尽管它不是应该调用的版本。如果我在invoke.hpp中注释掉const版本,则该示例编译良好。

这是Visual Studio 2013boost-1.56的错误吗?

在不修改升压源的情况下,有没有解决这个问题的方法?

我怀疑VS2013的BOOST_RESULT_OF默认值已更改。

#define BOOST_RESULT_OF_USE_TR1

使其可编译。这个错误很可能是已知的,并且已经在trunk中修复,但您可能仍然想报告它