diff --git a/CMakeLists.txt b/CMakeLists.txt
index 09e3e20d005525ba055b4c65128541495958e48c..b8e4d6d402ab0d28f2b487b6e6d582a662f98c90 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -534,8 +534,9 @@ ENDIF(KWSYS_USE_FundamentalType)
 
 IF(KWSYS_USE_IOStream)
   # Determine whether iostreams support long long.
-  CHECK_TYPE_SIZE("long long" KWSYS_SIZEOF_LONG_LONG)
-  IF(KWSYS_SIZEOF_LONG_LONG)
+  KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_LONG_LONG
+    "Checking whether C++ compiler has 'long long'" DIRECT)
+  IF(KWSYS_CXX_HAS_LONG_LONG)
     SET(KWSYS_PLATFORM_CXX_TEST_DEFINES
       -DKWSYS_IOS_USE_ANSI=${KWSYS_IOS_USE_ANSI}
       -DKWSYS_IOS_HAVE_STD=${KWSYS_IOS_HAVE_STD})
@@ -544,10 +545,10 @@ IF(KWSYS_USE_IOStream)
     KWSYS_PLATFORM_CXX_TEST(KWSYS_IOS_HAS_OSTREAM_LONG_LONG
       "Checking if ostream supports long long" DIRECT)
     SET(KWSYS_PLATFORM_CXX_TEST_DEFINES)
-  ELSE(KWSYS_SIZEOF_LONG_LONG)
+  ELSE()
     SET(KWSYS_IOS_HAS_ISTREAM_LONG_LONG 0)
     SET(KWSYS_IOS_HAS_OSTREAM_LONG_LONG 0)
-  ENDIF(KWSYS_SIZEOF_LONG_LONG)
+  ENDIF()
 ENDIF(KWSYS_USE_IOStream)
 
 IF(KWSYS_NAMESPACE MATCHES "^kwsys$")
diff --git a/kwsysPlatformTestsCXX.cxx b/kwsysPlatformTestsCXX.cxx
index 4a19ef8d6b3a33c78a24c3250fed00be71b0cb4f..903be9bdb2f4e86624844a91d4bdac31d5e022f5 100644
--- a/kwsysPlatformTestsCXX.cxx
+++ b/kwsysPlatformTestsCXX.cxx
@@ -113,6 +113,15 @@ void f(size_t) {}
 int main() { return 0; }
 #endif
 
+#ifdef TEST_KWSYS_CXX_HAS_LONG_LONG
+long long f(long long n) { return n; }
+int main()
+{
+  long long n = 0;
+  return static_cast<int>(f(n));
+}
+#endif
+
 #ifdef TEST_KWSYS_CXX_HAS_NULL_TEMPLATE_ARGS
 template <class T> class A;
 template <class T> int f(A<T>&);