неверная инициализация неконстантной ссылки из rvalue
Итак, у меня есть следующая функция:
void scan(std::istream& is, Handler& h);
Я хочу назвать это по-разному, например:
scan(std::cin, Handler());
scan(std::ifstream("myfile"), myhandler);
Компилятор жалуется наstd::ifstream("myfile")
а такжеHandler()
из-за того, что значения передаются как неконстантные ссылки, так что жалоба законна, но что я могу сделать?
const
(istream
изменяется во время чтения, а обработчик изменяет свое состояние во время обратных вызовов).Если я изменю типы параметров на rvalue ссылки (&&
) тогда я не смогу пройтиstd::cin
а иногда я действительно забочусь о конечном состоянииmyhandler
таким образом я не могу подать заявкуstd::move
на них тоже нет.В принципе я мог бы сделать параметры как универсальные ссылки через шаблон илиauto&&
вывод типа и, таким образом, перегрузка этой функции для всех возможных комбинаций ссылок lvalue и rvalue, но я не намерен перегружать эту функцию для других типов, которые я уже не указал.Есть ли другие варианты?
Каким-то образом вся эта семантика движения помешала в таком тривиальном примере.