diff -ur ncurses-5.2/c++/cursesw.cc ncurses-5.2-prime/c++/cursesw.cc
--- ncurses-5.2/c++/cursesw.cc  Sat Sep  2 18:55:31 2000
+++ ncurses-5.2-prime/c++/cursesw.cc    Fri May 24 11:43:15 2002
@@ -45,7 +45,7 @@
 int
 NCursesWindow::scanw(const char* fmt, ...)
 {
-#if defined(__GNUG__)
+#if (__GNUG__ <= 2)
     va_list args;
     va_start(args, fmt);
     char buf[BUFSIZ];
@@ -65,7 +65,7 @@
 int
 NCursesWindow::scanw(int y, int x, const char* fmt, ...)
 {
-#if defined(__GNUG__)
+#if (__GNUG__ <= 2)
     va_list args;
     va_start(args, fmt);
     char buf[BUFSIZ];
diff -ur ncurses-5.2/c++/cursesw.h ncurses-5.2-prime/c++/cursesw.h
--- ncurses-5.2/c++/cursesw.h   Sat Oct 23 15:16:53 1999
+++ ncurses-5.2-prime/c++/cursesw.h     Fri May 24 11:49:09 2002
@@ -7,7 +7,7 @@
 #include <etip.h>
 #include <stdio.h>
 #include <stdarg.h>
-#ifdef __MWERKS__
+#if defined(__MWERKS__) || __GNUG__ >=3
 /* This is a bogus check, stringstream is actually ANSI C++ standard,
  * but old compilers like GCC don't have it, and new compilers like Metrowerks
  * don't have strstream