c ++错误std :: result_of没有命名类型

时间:2012-10-03 15:05:32

标签: c++ gcc c++11 g++ result-of

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编译示例无济于事。 这是特定编译器的问题还是我做错了什么?

1 个答案:

答案 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>