Если вы вставите указатель на символ в поток символов, указанная строка будет напечатана, пока не будет достигнут нулевой терминатор. Если нет нулевого терминатора, то поведение программы не определено.
std::string_view
не гарантирует нулевого завершения. Поэтому вставлять std::string_view::data
в поток символов опасно. В этом конкретном случае строковое представление указывает на ненулевую завершающуюся подстроку в нулевой завершенной строке, поэтому поведение хорошо определено, но не то, что вы предполагали, поскольку вывод будет продолжаться за пределами подстроки.
Как я могу удалить предшествующий]?
Вернуть строковый вид в подстроку, а не в указатель:
constexpr std::string_view to_string() {
...
return str2;
}