65class BackedStringView {
67 std::variant<std::string, std::string_view> data;
76 std::string_view view;
78 Ptr(std::string_view view): view(view) {}
79 const std::string_view * operator->()
const {
return &view; }
83 BackedStringView(std::string &&
s): data(std::move(
s)) {}
84 BackedStringView(std::string_view sv): data(sv) {}
86 BackedStringView(
const char (& lit)[N]): data(std::string_view(lit)) {}
88 BackedStringView(
const BackedStringView &) =
delete;
89 BackedStringView & operator=(
const BackedStringView &) =
delete;
96 BackedStringView & operator=(BackedStringView && other) =
default;
100 return std::holds_alternative<std::string>(data);
103 std::string toOwned() &&
106 ? std::move(std::get<std::string>(
data))
110 std::string_view operator*()
const
113 ? std::get<std::string>(
data)
116 Ptr operator->()
const {
return Ptr(**
this); }