Выход view класса из контекста функции требует строк пяти комментариев зачем это вообще надо и проверок, что используются неперемещающие контейнеры, коих в стд примерно 5. В идеале вообще нужно делать отдельный строковый класс и подавлять move конструкторы, потому что возможность синтезировать такие view дописывает невыражаемое в языке условие на деструктор
Я тут немного поэкспериментировал с враперами, но, на сколько я вижу, это почти никак не влияет на результат.
На самом деле, чтобы это работало нужно запретить практически все модифицирующие операции на строке. В том числе деструктор. Потому что даже если использовать враппер struct { const std::string s; }
вектор при ресайзе просто скопирует его и удалит старый инстанс, оставив dangling string_view
.