考虑到clang与c ++ std :: functional实现的行为,我遇到了一个问题。首先要做的第一件事:以下是我尝试使用XCode 5.0.2在MacO Mavericks下编译的一些代码
#include <functional>
#include <ostream>
typedef std::function< std::ostream& (const void*, std::ostream&, uint32_t&, bool) > my_fancy_functor;
static void doSomething(const my_fancy_functor fcn)
{
//... do something
}
这导致“语义错误”,其中包含以下文本:
Implicit instantiation of undefined template 'std::__1::function<std::__1::basic_ostream<char> &(const void *, std::__1::basic_ostream<char> &, unsigned int &, bool *)>'
将typedef更改为只获取三个参数的std :: function将编译得很好
typedef std::function< std::ostream& (const void*, std::ostream&, uint32_t&) > my_fancy_functor;
有谁知道我在这里做错了什么。该代码可以使用Visual Studio 2010-2013以及gcc版本&gt;进行编译。 4.7.0
截至目前,我确信它与功能内部使用的std :: ostream无关。将此示例中使用的任何类型替换为任何其他可以想象的类型将导致相同的错误消息,这使我相信std :: functional本身的实现可能有问题。
任何帮助我解决这个烂摊子的帮助或提示都将非常感激!
答案 0 :(得分:3)
在C++ Language Dialect
中将C++11 [-std=c++11]
设置为GNU++11 [-std=gnu++11]
或Build Settings
,它就可以正常编译。