17class BackedStringView {
19 std::variant<std::string, std::string_view> data;
28 std::string_view view;
30 Ptr(std::string_view view): view(view) {}
31 const std::string_view * operator->()
const {
return &view; }
35 BackedStringView(std::string && s): data(std::move(s)) {}
36 BackedStringView(std::string_view sv): data(sv) {}
38 BackedStringView(
const char (& lit)[N]): data(std::string_view(lit)) {}
40 BackedStringView(
const BackedStringView &) =
delete;
41 BackedStringView & operator=(
const BackedStringView &) =
delete;
48 BackedStringView & operator=(BackedStringView && other) =
default;
52 return std::holds_alternative<std::string>(data);
55 std::string toOwned() &&
58 ? std::move(std::get<std::string>(data))
59 : std::string(std::get<std::string_view>(data));
62 std::string_view operator*()
const
65 ? std::get<std::string>(data)
66 : std::get<std::string_view>(data);
68 Ptr operator->()
const {
return Ptr(**
this); }