summaryrefslogtreecommitdiffstats
path: root/Utilities
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities')
-rw-r--r--Utilities/std/CMakeLists.txt3
-rw-r--r--Utilities/std/cmext/string_view42
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