Почему нет поддержки для конкатенации std::string и std:: string_view?

Так как С++ 1z, std::string_view, легкий вид в непрерывную последовательность символов, которая позволяет избежать ненужного копирования данные. Вместо того, чтобы иметь параметр const std::string&, теперь часто рекомендуется использовать std::string_view.

Однако быстро обнаруживается, что переключение с const std::string& на std::string_view прерывает код, который использует конкатенацию строк, поскольку нет поддержки для конкатенации std::string и std::string_view:

std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile)
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)

Почему нет поддержки для конкатенации std::string и std::string_view в стандарте?

Ответы

Ответ 1

Причина этого указана в n3512 string_ref: ссылка на не принадлежащую строчку, версия 2 Джеффри Яскина:

Я также пропустил оператор + (basic_string, basic_string_ref), потому что LLVM возвращает легкий объект из этой перегрузки и лениво выполняет конкатенацию. Если мы определим эту перегрузку, нам будет сложно ввести эту легкую конкатенацию позже.

Позже было предложено в std-proposals список рассылки, чтобы добавить эти перегрузки оператора в стандарт.