Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No implicit conversion from std::string to std::string_view in C++17 (was in std::experimental::basic_string_view)

Tags:

c++

c++17

My question is regarding C++17: http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view

What's the caveat of implicit conversion from std::basic_string to std::basic_string_view that it wasn't included in the interface of the latter?

I believe it would greatly improve this class. Especially the family of comparison operators that, also do not accept std::string as neither lhs nor rhs.

There is such conversion in library fundamentals TS specification: http://en.cppreference.com/w/cpp/experimental/basic_string_view/basic_string_view

This question is about why it was removed. Or rather not adopted.

like image 345
GreenScape Avatar asked Aug 29 '16 13:08

GreenScape


1 Answers

basic_string_view is considered the lower level class. It's the providers of string containers who have the responsibility of providing implicit conversions to string_view. If you have your own string type, then you would give it a possibly explicit operator string_view() overload to perform implicit conversion.

As such, it was decided (PDF) that basic_string would provide the conversion to basic_string_view. The original Library Fundamentals version put the implicit conversion on basic_string_view, because a TS is usually an extension. It can't affect an existing type without effectively forking that type.

like image 85
Nicol Bolas Avatar answered Oct 22 '22 19:10

Nicol Bolas