Запретить использование указателя / ссылки на const для временного объекта в C ++ (без 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;
};

и эта функция, возвращающая двойное значение

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 (как вы предпочитаете), но не функцию весело, чтобы последняя строка возвращала ошибку времени компиляции? Обратите внимание, что вы можете изменить подпись конструктора (если я могу инициализировать ссылку, как задумано).

8
задан MrSmith42 2 February 2013 в 23:16
поделиться