Sono di fronte al seguente problema. Si consideri il seguente classe:Non consentire il prelievo di puntatore/riferimento a const a un oggetto temporaneo in C++ (senza 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;
};
e questa funzione restituisce un doppio
double fun() {return 1.0;}
Se ora abbiamo
double x = 1.0;
const double xc = 1.0;
Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK
bene finora, però:
//Ref<double> ref2(fun()); //Fails as I want it to
Ref<const double> refc2(fun()); //Works but I would like it not to
Is c'è un modo per modificare Ref (come te preferisci) ma non è divertente la funzione, in modo che l'ultima riga restituisca un errore in fase di compilazione? Si noti che è possibile modificare la firma del costruttore (a condizione che sia in grado di inizializzare il Ref come previsto).
Questo è (per me) il più vicino al problema dichiarato (con anche considerazioni interessanti, specialmente l'ultimo), grazie per l'aiuto! – stepelu