Me enfrento con el siguiente problema. Considere la clase siguiente:No permitir tomar puntero/referencia a const a un objeto temporal en C++ (sin C++ 0X)
//Will be similar to bost::reference_wrapper
template<class T>
class Ref {
public:
explicit Ref(T& t) : m_ptr(&t) {}
private:
T* m_ptr;
};
y esta función que devuelve un doble
double fun() {return 1.0;}
Si ahora tenemos
double x = 1.0;
const double xc = 1.0;
Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK
bien hasta ahora sin embargo,:
//Ref<double> ref2(fun()); //Fails as I want it to
Ref<const double> refc2(fun()); //Works but I would like it not to
Es hay una manera de modificar Ref (la forma en que prefiero) pero no la función fun, de modo que la última línea devuelve un error en tiempo de compilación? Tenga en cuenta que puede modificar la firma del constructor (siempre que pueda inicializar la Ref como estaba previsto).
Esto es (para mí) el más cercano al problema establecido (con consideraciones también interesantes, especialmente la última), ¡Gracias por tu ayuda! – stepelu