Example
constexpr std::string text = "Hello, World!";
constexpr std::string_view view(text.c_str() + 7, 5);
static_assert(view == std::string_view{"World"});
Puzzle
- Can you implement
buffer
with explicit conversion to string_view?
template<auto N>
struct buffer; // TODO
constexpr buffer<42> b;
static_assert(42 == std::string_view{b}.size());
static_assert(&b.data[0] == std::string_view{b}.begin());
static_assert(&b.data[42] == std::string_view{b}.end());
Solutions
template <auto N>
struct buffer {
constexpr buffer() {}
constexpr char const* begin() const { return data; }
constexpr char const* end() const { return data + N; }
constexpr operator std::basic_string_view<char>() const {
return std::basic_string_view<char>(begin(), end());
}
char data[N]{};
};