неверная инициализация неконстантной ссылки из 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, но я не намерен перегружать эту функцию для других типов, которые я уже не указал.

Есть ли другие варианты?

Каким-то образом вся эта семантика движения помешала в таком тривиальном примере.

Ответы на вопрос(1)

Ваш ответ на вопрос