diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1b5495bf8f1898f68da4019d50a50630bfff6e41..4d0e07a7a6a396bc6778c4be0147ed3b8c48b8e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -395,17 +395,17 @@ ELSE(KWSYS_STL_HAS_ALLOCATOR_TEMPLATE)
 ENDIF(KWSYS_STL_HAS_ALLOCATOR_TEMPLATE)
 KWSYS_PLATFORM_CXX_TEST(KWSYS_STL_HAS_ALLOCATOR_OBJECTS
   "Checking whether stl containers support allocator objects." DIRECT)
-IF(KWSYS_IOS_USE_ANSI)
+IF(KWSYS_IOS_USE_ANSI AND NOT WATCOM)
   # ANSI streams always have string operators.
   SET(KWSYS_STL_STRING_HAVE_OSTREAM 1)
   SET(KWSYS_STL_STRING_HAVE_ISTREAM 1)
-ELSE(KWSYS_IOS_USE_ANSI)
+ELSE(KWSYS_IOS_USE_ANSI AND NOT WATCOM)
   # There may not be string operators for old streams.
   KWSYS_PLATFORM_CXX_TEST(KWSYS_STL_STRING_HAVE_OSTREAM
     "Checking whether stl string has ostream operator<<" DIRECT)
   KWSYS_PLATFORM_CXX_TEST(KWSYS_STL_STRING_HAVE_ISTREAM
     "Checking whether stl string has istream operator>>" DIRECT)
-ENDIF(KWSYS_IOS_USE_ANSI)
+ENDIF(KWSYS_IOS_USE_ANSI AND NOT WATCOM)
 SET(KWSYS_PLATFORM_CXX_TEST_DEFINES)
 
 KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_NULL_TEMPLATE_ARGS
diff --git a/kwsys_stl_string.hxx.in b/kwsys_stl_string.hxx.in
index c94b989bdaebdfc640616289da8f3d155d244103..db4b23d436a014681f3a39f8ced31dcc5706b9ef 100644
--- a/kwsys_stl_string.hxx.in
+++ b/kwsys_stl_string.hxx.in
@@ -29,6 +29,13 @@
 # define @KWSYS_NAMESPACE@_STL_STRING_ISTREAM_DEFINED
 # include <ctype.h> // isspace
 # include <@KWSYS_NAMESPACE@/ios/iostream>
+# if defined(__WATCOMC__)
+namespace @KWSYS_NAMESPACE@
+{
+struct ios_istream_hack: public kwsys_ios::istream
+{ void eatwhite() { this->@KWSYS_NAMESPACE@_ios::istream::eatwhite(); } };
+}
+# endif
 inline @KWSYS_NAMESPACE@_ios::istream&
 operator>>(@KWSYS_NAMESPACE@_ios::istream& is,
            @KWSYS_NAMESPACE@_stl::string& s)
@@ -43,8 +50,12 @@ operator>>(@KWSYS_NAMESPACE@_ios::istream& is,
   s.erase();
 
   // Skip leading whitespace.
+#if defined(__WATCOMC__)
+  static_cast<@KWSYS_NAMESPACE@::ios_istream_hack&>(is).eatwhite();
+#else
   is.eatwhite();
-  istream& okay = is;
+#endif
+  @KWSYS_NAMESPACE@_ios::istream& okay = is;
 
   if(okay)
     {