Pregunta

Después de g++ -std=c++0x'ing std::result_of se produce el siguiente mensaje de error

error: ‘result_of’ in namespace ‘std’ does not name a type

(g++ versión 4.5.0 en SUSE.)

El código correspondiente, suficiente para reproducir el error está por debajo de

#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); }
};

Por otra parte, he tratado de compilar los ejemplos de la wikipedia o cpluplus.com fue en vano.Es un problema con el compilador o estoy haciendo algo mal?

¿Fue útil?

Solución

Trate de incluir <functional> también.gcc 4.5 se basa en una versión anterior de C++11, en el que std::result_of se define en <functional> en lugar de <type_traits>.

Este movimiento se introdujo en n3090 (2010 29 de Marzo) después de la fijación de tema 1270.gcc 4.5.0 fue lanzado apenas 16 días después de que el cambio (2010 14 de abril), que no tienen el tiempo suficiente para aplicar, como podemos ver en esta línea de código fuente de <functional>.

std::result_of fue trasladado a <type_traits> en gcc 4.6.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top