summaryrefslogtreecommitdiffstats
path: root/Utilities
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-05-01 12:26:45 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-05-01 12:27:37 (GMT)
commit68a59ab2887f220a22c194b930c28d5498a7fd8d (patch)
treee68f59c90929e65b70e75c43d45ff2b87c777d9a /Utilities
parentd1d1d4134dc2f6b84aba7b3cfe3bc83364859603 (diff)
parent8d4a9ee398ef85b4f59a8e2b966d9675d7e53f44 (diff)
downloadCMake-68a59ab2887f220a22c194b930c28d5498a7fd8d.zip
CMake-68a59ab2887f220a22c194b930c28d5498a7fd8d.tar.gz
CMake-68a59ab2887f220a22c194b930c28d5498a7fd8d.tar.bz2
Merge topic 'stl-support'
8d4a9ee398 Refactoring: rename "cm_static_string_view.hxx" as <cmext/string_view> Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4689
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