summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmStringAlgorithms.h7
-rw-r--r--Tests/CMakeLib/testStringAlgorithms.cxx10
2 files changed, 17 insertions, 0 deletions
diff --git a/Source/cmStringAlgorithms.h b/Source/cmStringAlgorithms.h
index f3c262b..01e3d94 100644
--- a/Source/cmStringAlgorithms.h
+++ b/Source/cmStringAlgorithms.h
@@ -33,6 +33,13 @@ inline bool cmNonempty(std::string const* str)
return str && !str->empty();
}
+/** Returns length of a literal string. */
+template <size_t N>
+constexpr size_t cmStrLen(const char (&/*str*/)[N])
+{
+ return N - 1;
+}
+
/** Callable string comparison struct. */
struct cmStrCmp
{
diff --git a/Tests/CMakeLib/testStringAlgorithms.cxx b/Tests/CMakeLib/testStringAlgorithms.cxx
index 63826cf..c2706c1 100644
--- a/Tests/CMakeLib/testStringAlgorithms.cxx
+++ b/Tests/CMakeLib/testStringAlgorithms.cxx
@@ -226,5 +226,15 @@ int testStringAlgorithms(int /*unused*/, char* /*unused*/ [])
"cmStrToULong rejects trailing content.");
}
+ // ----------------------------------------------------------------------
+ // Test cmStrLen
+ {
+ constexpr auto len = cmStrLen("Hello world!");
+ assert_ok(len == 12,
+ "cmStrLen returns length of non-empty literal string");
+ assert_ok(cmStrLen("") == 0,
+ "cmStrLen returns length of empty literal string");
+ }
+
return failed;
}