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は、の代わりにでstd::result_of定義されている古いバージョンのC++11に基づいています。<functional><type_traits>

この動きは、問題1270を修正した後、 n3090(2010年3月29日)に導入されました。gcc 4.5.0は、変更のわずか16日後 (2010年4月14日)にリリースされましたが、このオンラインソースコードからわかるように、適用するのに十分な時間がありませんでした。<functional>

std::result_ofgcc4.6でに移動さ<type_traits>れました。

于 2012-10-03T17:39:23.973 に答える