std :: basic_istream :: ignore зависает, если установлен разделитель MSB - PullRequest
2 голосов
/ 09 февраля 2020

Учитывая следующий фрагмент:

#include <iostream>
#include <sstream>

int main()
{
  std::stringstream str;
  str.put('a');
  str.put('\x80');
  str.put('a');

  str.ignore(32, '\x80'); // hangs
  std::cout << str.tellg() << "\n";
}

Если скомпилировано с g cc, отмеченная строка зависает, шаг сборки указывает на бесконечное l oop. Я пробовал G CC 5.4, 6.3, 8.2, 9.2, на разных ОС результат одинаковый. На wandbox, также пробовал clang (который, вероятно, идет с libc ++ вместо libstdc ++), он нормально завершается.

Это происходит только в том случае, если вторым аргументом ignore является символ с установленным MSB, и если есть хотя бы один символ до и после в потоке. Является ли это ошибкой в ​​libstdc ++ или стандарт запрещает разделители, не относящиеся к ascii?

...