Вам может не понравиться синтаксис, чтобы использовать его, но заставьте конструктор взять указатель вместо ссылки. Вы не можете взять даже временный указатель const.
По крайней мере, не без контрабанды через другую оболочку, которая, как мы надеемся, делает код Очевидно неправильным (TM): template <typename T> T *reftoptr(T &t) { return &t; }
Тем не менее, если вы используете этот способ, как reference_wrapper
, ваши пользователи могут хотеть для захвата временных. Пока объект Ref также является временным в том же полном выражении, что и временный объект, который он захватывает, я думаю, что все в порядке. Так, например,
some_algorithm(iterator, anotherit, static_cast<Ref<const double> >(fun()));