Похоже, что это недопустимая оптимизация.Что если begin_
равен this
, то есть адресу самого CharStream
(и считывать байты любого объекта, используя char*
)?В этом случае после первого чтения значение CharStream
изменится, и значение диапазона может измениться [begin;конец)
Чтобы избежать этого, вы можете сделать одно из следующих действий:
- принять CharStream по значению (чтобы его адрес был уникальным и не совпадал ни с одним
char*
): https://gcc.godbolt.org/z/QfOUwW (обратите внимание на изменение в поведении. Вам нужно будет вернуть поток, если вам нужны изменения) - использовать другой тип вместо
char
, чтобы он не мог иметь псевдоним с CharStream
: https://gcc.godbolt.org/z/2_gREf (будьте осторожны, при считывании ваших данных может быть не определено использование Byte*
вместо char*
, поскольку изначально some_other_type*
)