diff options
Diffstat (limited to 'Utilities/std/cmext/string_view')
-rw-r--r-- | Utilities/std/cmext/string_view | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Utilities/std/cmext/string_view b/Utilities/std/cmext/string_view new file mode 100644 index 0000000..ad52b11 --- /dev/null +++ b/Utilities/std/cmext/string_view @@ -0,0 +1,42 @@ +// -*-c++-*- +// vim: set ft=cpp: + +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmext_string_view +#define cmext_string_view + +#include <cstddef> + +#include <cm/string_view> + +namespace cm { + +/** A string_view that only binds to static storage. + * + * This is used together with the `""_s` user-defined literal operator + * to construct a type-safe abstraction of a string_view that only views + * statically allocated strings. These strings are const and available + * for the entire lifetime of the program. + */ +class static_string_view : public string_view +{ + static_string_view(string_view v) + : string_view(v) + { + } + + friend static_string_view operator"" _s(const char* data, size_t size); +}; + +/** Create a static_string_view using `""_s` literal syntax. */ +inline static_string_view operator"" _s(const char* data, size_t size) +{ + return string_view(data, size); +} + +} // namespace cm + +using cm::operator"" _s; + +#endif |