On Dec 22, 2013, at 6:21 AM, Peter A. Bigot
(Background: I need a string_view with features in N3762 that aren't in N3442 (viz., pos parameters to the string methods). I'm trying to determine how much effort I should put into a set of patches to update the Boost implementation to the latest draft proposal.)
The default constructor for Boost.string_ref produces an object which returns a null pointer from data(). N3442 and its successor N3762 both require the return value from data() to be non-null (http://isocpp.org/files/papers/N3762.html#h5o-5).
Yeah; I’ve spoken to Jeffrey (author of the proposal) and will be filing a defect report about that.
GCC's libstdc++ folks solved this by adding a constexpr unit length string to serve as the base referenced object (http://gcc.gnu.org/ml/libstdc++/2013-11/msg00104.html). But for Boost I don't see how this can be changed without introducing a link dependency.
Right. Not to mention that if you initialize a string_ref ( NULL, 0 ) then requiring its’ data() call to return non-null means extra code. If the length of the string_ref is 0, then the return value of data() is meaningless; you can’t do anything useful with it. * You can’t dereference it, any more than you can dereference the end() iterator of a vector. * You can’t compare it to a pointer in another container (undefined behavior). * You can compare it with NULL, but what does that tell you?
In a cases like this, how closely does Boost want to track the standard proposals?
Similarly, the standard proposal has settled on *string_view instead of *string_ref. Would Boost rename the library/class, or just introduce an alias?
I have that on my to-do list. My thought is to rename the classes to match the standard, but keep the string_ref typedefs for compatibility. [ I’m open to other suggestions. ] I will happily consider patches for the missing features. [ Though my opinion is that replicating the entire interface of std::string in string_[ref|view] is a mistake ] -- Marshall Marshall Clow Idio Software mailto:mclow.lists@gmail.com A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait). -- Yu Suzuki