Я столкнулся со следующей проблемой. Рассмотрим следующий класс:
//Will be similar to bost::reference_wrapper
template<class T>
class Ref {
public:
explicit Ref(T& t) : m_ptr(&t) {}
private:
T* m_ptr;
};
и эта функция, возвращающая двойное значение
double fun() {return 1.0;}
Однако, если у нас есть
double x = 1.0;
const double xc = 1.0;
Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK
, пока все хорошо:
//Ref<double> ref2( fun() ); //Fails as I want it to
Ref<const double> refc2( fun() ); //Works but I would like it not to
Есть ли способ изменить Ref (как вы предпочитаете), но не функцию весело, чтобы последняя строка возвращала ошибку времени компиляции? Обратите внимание, что вы можете изменить подпись конструктора (если я могу инициализировать ссылку, как задумано).