g++ -std=c++0x
std::result_of
生成以下错误消息后
error: ‘result_of’ in namespace ‘std’ does not name a type
(SUSE上的g ++版本4.5.0。)
足以复制错误的相关代码段如下
#include <random>
#include <type_traits>
using namespace std;
class Rnd{
protected:
static default_random_engine generator_;
};
template<class distribution>
class Distr: Rnd{
distribution distribution_;
public:
typename std::result_of<distribution(default_random_engine)>::type
operator() (){ return distribution_(default_random_engine); }
};
此外,我试图从维基百科或cpluplus.com编译示例无济于事。 这是特定编译器的问题还是我做错了什么?
答案 0 :(得分:7)
尝试同时包含<functional>
。 gcc 4.5基于旧版本的C ++ 11,其中std::result_of
在<functional>
而非<type_traits>
中定义。
此举是在n3090(2010年3月29日)修复issue 1270后引入的。 gcc 4.5.0在更改(2010 April 14)后16天发布,没有足够的时间来应用,正如我们从<functional>
的{{3}}所看到的那样。
std::result_of
已移至this online source code中的<type_traits>
。