После g++ -std=c++0x
«ИНГ std::result_of
выдает следующее сообщение об ошибке
error: ‘result_of’ in namespace ‘std’ does not name a type
(g ++ версия 4.5.0 на SUSE.)
Соответствующий кусок кода, достаточный для воспроизведения ошибки, находится ниже
#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 безрезультатно.
Это проблема с конкретным компилятором или я делаю что-то не так?
Попробуй включить <functional>
также. gcc 4.5 основан на более старой версии C ++ 11, в которой std::result_of
определяется в <functional>
вместо <type_traits>
,
Этот шаг был введен в n3090 (29 марта 2010 г.) после исправления выпуск 1270. GCC 4.5.0 был выпущен только через 16 дней после изменения (14 апреля 2010 г.), который не успел подать заявку, как мы видим из этот онлайн исходный код из <functional>
,
std::result_of
был перемещен в <type_traits>
в gcc 4.6.
Других решений пока нет …