diff --git a/CMakeLists.txt b/CMakeLists.txt
index 28716b683a660d4309cd0ea9ba21d5d14ad64292..7ebbb27ec8abc0c5a690cd9fce8c80f309306f08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -175,6 +175,9 @@ ELSE(KWSYS_IOS_USE_SSTREAM)
   ENDIF(KWSYS_IOS_USE_STRSTREAM_H)
 ENDIF(KWSYS_IOS_USE_SSTREAM)
 
+KWSYS_PLATFORM_CXX_TEST(KWSYS_STL_STRING_HAVE_NEQ_CHAR
+  "Checking whether stl string has operator!= for char*" DIRECT)
+
 IF(KWSYS_IOS_USE_ANSI)
   # ANSI streams always have string operators.
   SET(KWSYS_STL_STRING_HAVE_OSTREAM 1)
diff --git a/Configure.hxx.in b/Configure.hxx.in
index 3144d33036203a98d94fee208af4adbd7cd79693..d1c6d87062c08401d687cabda5d1272bf69afef0 100644
--- a/Configure.hxx.in
+++ b/Configure.hxx.in
@@ -41,6 +41,9 @@
 /* Whether the STL string has operator>> for istream.  */
 #define @KWSYS_NAMESPACE@_STL_STRING_HAVE_ISTREAM @KWSYS_STL_STRING_HAVE_ISTREAM@
 
+/* Whether the STL string has operator!= for char*.  */
+#define @KWSYS_NAMESPACE@_STL_STRING_HAVE_NEQ_CHAR @KWSYS_STL_STRING_HAVE_NEQ_CHAR@
+
 /* Define the stl namespace macro.  */
 #if @KWSYS_NAMESPACE@_STL_HAVE_STD
 # define @KWSYS_NAMESPACE@_stl std
@@ -70,16 +73,17 @@
 #  define kwsys_stl @KWSYS_NAMESPACE@_stl
 #  define kwsys_ios @KWSYS_NAMESPACE@_ios
 # endif
-# define KWSYS_NAME_IS_KWSYS           @KWSYS_NAMESPACE@_NAME_IS_KWSYS
-# define KWSYS_STL_HAVE_STD            @KWSYS_NAMESPACE@_STL_HAVE_STD
-# define KWSYS_IOS_HAVE_STD            @KWSYS_NAMESPACE@_IOS_HAVE_STD
-# define KWSYS_IOS_USE_ANSI            @KWSYS_NAMESPACE@_IOS_USE_ANSI
-# define KWSYS_IOS_USE_SSTREAM         @KWSYS_NAMESPACE@_IOS_USE_SSTREAM
-# define KWSYS_IOS_USE_STRSTREAM_H     @KWSYS_NAMESPACE@_IOS_USE_STRSTREAM_H
-# define KWSYS_IOS_USE_STRSTREA_H      @KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H
-# define KWSYS_STAT_HAS_ST_MTIM        @KWSYS_NAMESPACE@_STAT_HAS_ST_MTIM
-# define KWSYS_STL_STRING_HAVE_OSTREAM @KWSYS_NAMESPACE@_STL_STRING_HAVE_OSTREAM
-# define KWSYS_STL_STRING_HAVE_ISTREAM @KWSYS_NAMESPACE@_STL_STRING_HAVE_ISTREAM
+# define KWSYS_NAME_IS_KWSYS            @KWSYS_NAMESPACE@_NAME_IS_KWSYS
+# define KWSYS_STL_HAVE_STD             @KWSYS_NAMESPACE@_STL_HAVE_STD
+# define KWSYS_IOS_HAVE_STD             @KWSYS_NAMESPACE@_IOS_HAVE_STD
+# define KWSYS_IOS_USE_ANSI             @KWSYS_NAMESPACE@_IOS_USE_ANSI
+# define KWSYS_IOS_USE_SSTREAM          @KWSYS_NAMESPACE@_IOS_USE_SSTREAM
+# define KWSYS_IOS_USE_STRSTREAM_H      @KWSYS_NAMESPACE@_IOS_USE_STRSTREAM_H
+# define KWSYS_IOS_USE_STRSTREA_H       @KWSYS_NAMESPACE@_IOS_USE_STRSTREA_H
+# define KWSYS_STAT_HAS_ST_MTIM         @KWSYS_NAMESPACE@_STAT_HAS_ST_MTIM
+# define KWSYS_STL_STRING_HAVE_OSTREAM  @KWSYS_NAMESPACE@_STL_STRING_HAVE_OSTREAM
+# define KWSYS_STL_STRING_HAVE_ISTREAM  @KWSYS_NAMESPACE@_STL_STRING_HAVE_ISTREAM
+# define KWSYS_STL_STRING_HAVE_NEQ_CHAR @KWSYS_NAMESPACE@_STL_STRING_HAVE_NEQ_CHAR
 #endif
 
 #endif
diff --git a/kwsysPlatformCxxTests.cxx b/kwsysPlatformCxxTests.cxx
index d8454fd0b3556f8768c473cefe9ee921d2dcb729..5d247661d33ae43f76791366979646717fd543bc 100644
--- a/kwsysPlatformCxxTests.cxx
+++ b/kwsysPlatformCxxTests.cxx
@@ -54,6 +54,17 @@ void f(istream& is, kwsys_stl::string& s) { is >> s; }
 int main() { return 0; }
 #endif
 
+#ifdef TEST_KWSYS_STL_STRING_HAVE_NEQ_CHAR
+# if KWSYS_STL_HAVE_STD
+#  define kwsys_stl std
+# else
+#  define kwsys_stl
+# endif
+# include <string>
+bool f(const kwsys_stl::string& s) { return s != ""; }
+int main() { return 0; }
+#endif
+
 #ifdef TEST_KWSYS_STAT_HAS_ST_MTIM
 #include <sys/types.h>
 #include <sys/stat.h>
diff --git a/kwsys_stl_string.hxx.in b/kwsys_stl_string.hxx.in
index 068fb21fab9cf4b8adf099d8529da20f49c28bb6..3ff2506719d6425f09f0285854975df1a639d128 100644
--- a/kwsys_stl_string.hxx.in
+++ b/kwsys_stl_string.hxx.in
@@ -90,3 +90,22 @@ operator<<(@KWSYS_NAMESPACE@_ios::ostream& os,
   return os << s.c_str();
 }
 #endif
+
+// Provide the operator!= for the stl string and char* if it is not
+// provided by the system or another copy of kwsys.  Allow user code
+// to block this definition by defining the macro
+// @KWSYS_NAMESPACE@_STL_STRING_NO_NEQ_CHAR
+// to avoid conflicts with other libraries.
+#if !@KWSYS_NAMESPACE@_STL_STRING_HAVE_NEQ_CHAR && \
+    !defined(@KWSYS_NAMESPACE@_STL_STRING_NO_NEQ_CHAR) && \
+    !defined(KWSYS_STL_STRING_NEQ_CHAR_DEFINED)
+# define KWSYS_STL_STRING_NEQ_CHAR_DEFINED
+inline bool operator!=(@KWSYS_NAMESPACE@_stl::string const& s, const char* c)
+{
+  return !(s == c);
+}
+inline bool operator!=(const char* c, @KWSYS_NAMESPACE@_stl::string const& s)
+{
+  return !(s == c);
+}
+#endif