根据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,它也会在所有平台上编译.
我发现这个其他堆栈溢出问题表明它应该工作.
在以下情况下,编译器可以自动移动函数参数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) 尝试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) : …Run Code Online (Sandbox Code Playgroud)