6

g++ -std=c++0x'ing后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); }
};

此外,我尝试从 wikipedia 或 cpluplus.com 编译示例,但无济于事。这是特定编译器的问题还是我做错了什么?

4

1 回答 1

7

也尝试包括在内<functional>。gcc 4.5 基于旧版本的 C++11,其中std::result_of定义<functional><type_traits>.

修复问题 1270后,此举措在n3090(2010 年 3 月 29 日)中引入。gcc 4.5.0 仅在更改后 16 天 (2010 年 4 月 14 日)发布,没有足够的时间申请,从.<functional>

std::result_of移至gcc 4.6<type_traits>中。

于 2012-10-03T17:39:23.973 回答