So, I think:
1. We would use std::string_view everywhere if all the C functions took
a length instead of assuming null-termination. That's not going to
happen.
2. Overriding all methods to take either a const char* or a std::string
(ignoring ustring for now), would avoid the extra array copy, but I
don't think it's worth it other than for methods that typically take
very large strings.
3. GTK+ functions that take very large strings tend to take a length,
to avoid the need for copying. For instance,
gtk_text_buffer_set_text(). We could take std::string_view there, but
then our use of std::string_view::to_string() would be wasteful when
someone passes a std::string to our method.
This is discouraging, so I hope I'm wrong about something.