小编fun*_*mmy的帖子

std :: function赋值应该忽略返回类型吗?

根据C++ 11或C++ 14标准,代码是否在有效的C++下面?

#include <functional>

int ReturnInt()
{
  return 5;
}

int main( int argc, char **argv )
{
  std::function< void () > BoundType = ReturnInt;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码可以使用最新的gg(4.8.3)和clang(4.3.2)的cygwin版本编译,但不适用于Visual Studio 2013,Visual Studio 2013年11月的CTP或Visual Studio 14预览版.如果将std :: function更改为boost :: function,它也会在所有平台上编译.

我发现这个其他堆栈溢出问题表明它应该工作.

c++ c++11 std-function c++14

6
推荐指数
1
解决办法
1143
查看次数

如果函数调用是return语句,编译器是否可以自动移动函数参数?

在以下情况下,编译器可以自动移动函数参数v还是必须手动声明?

std::vector Filter(std::vector v);

void DoSomeStuffAndCallFilter(std::vector v)
{
  // do some stuff to v

  // can the compiler automatically std::move v in this call?
  // ie. return Filter(std::move(v));
  //
  return Filter(v);
}
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics c++11

5
推荐指数
1
解决办法
313
查看次数

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) : …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-fusion visual-studio-2013

2
推荐指数
1
解决办法
586
查看次数