Move the test for zero-length into the char_traits (from string_view). Add tests to char_traits specializations

llvm-svn: 228981
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: f3e0e3acdafb2b52eb197b4d8251aa2f91886d81
diff --git a/include/string b/include/string
index fe42bbf..9f4007a 100644
--- a/include/string
+++ b/include/string
@@ -636,7 +636,7 @@
         {return (unsigned char)__c1 < (unsigned char)__c2;}
 
     static inline int compare(const char_type* __s1, const char_type* __s2, size_t __n)
-        {return memcmp(__s1, __s2, __n);}
+        {return __n == 0 ? 0 : memcmp(__s1, __s2, __n);}
     static inline size_t length(const char_type* __s) {return strlen(__s);}
     static inline const char_type* find(const char_type* __s, size_t __n, const char_type& __a)
         {return (const char_type*)memchr(__s, to_int_type(__a), __n);}
@@ -681,7 +681,7 @@
         {return __c1 < __c2;}
 
     static inline int compare(const char_type* __s1, const char_type* __s2, size_t __n)
-        {return wmemcmp(__s1, __s2, __n);}
+        {return __n == 0 ? 0 : wmemcmp(__s1, __s2, __n);}
     static inline size_t length(const char_type* __s)
         {return wcslen(__s);}
     static inline const char_type* find(const char_type* __s, size_t __n, const char_type& __a)