diff options
Diffstat (limited to 'Utilities')
-rw-r--r-- | Utilities/std/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Utilities/std/cmext/string_view | 42 |
2 files changed, 44 insertions, 1 deletions
diff --git a/Utilities/std/CMakeLists.txt b/Utilities/std/CMakeLists.txt index a72abb7..17a7aaa 100644 --- a/Utilities/std/CMakeLists.txt +++ b/Utilities/std/CMakeLists.txt @@ -9,6 +9,7 @@ set(SRCS cm/bits/string_view.cxx cm/optional cm/shared_mutex cm/string_view - cm/utility) + cm/utility + cmext/string_view) add_library(cmstd STATIC ${SRCS}) 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 |