zstring: Fix char array conversion

We don't want to assume the entire char array is used for strings,
otherwise perfectly valid buffers from C are unusable as they always
hold less than or equal to the buffer size of string.

Change-Id: I1354d63b1aa64995ec245edb876fdf6e69be554a
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/zstring.cpp b/src/zstring.cpp
index 660b81c..ccddc83 100644
--- a/src/zstring.cpp
+++ b/src/zstring.cpp
@@ -3,7 +3,17 @@
 namespace stdplus
 {
 
+#ifdef NDEBUG
+#define zstring_debug_instance(char_t)
+#else
+#define zstring_debug_instance(char_t)                                         \
+    template std::size_t detail::zstring_validate<char_t>(                     \
+        const char_t* str, std::size_t min, std::size_t max)
+#endif
 #define zstring_instance(char_t)                                               \
+    template std::ptrdiff_t detail::zstring_find_term<char_t>(                 \
+        const char_t* str, std::size_t min, std::size_t max) noexcept;         \
+    zstring_debug_instance(char_t);                                            \
     template class basic_zstring<char_t>;                                      \
     template class basic_zstring<const char_t>
 zstring_instance(char);
@@ -12,5 +22,6 @@
 zstring_instance(char32_t);
 zstring_instance(wchar_t);
 #undef zstring_instance
+#undef zstring_debug_instance
 
 } // namespace stdplus