Skip to content

Latest commit

 

History

History
52 lines (37 loc) · 1.24 KB

354.md

File metadata and controls

52 lines (37 loc) · 1.24 KB
Info

Example

constexpr std::string text = "Hello, World!";
constexpr std::string_view view(text.c_str() + 7, 5);
static_assert(view == std::string_view{"World"});

https://godbolt.org/z/GYfWxPc17

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());

https://godbolt.org/z/hKjo8Pr88

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]{};
};

https://godbolt.org/z/1cY8enTqc