*** misc/STLport-4.0/src/gcc.mak	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/src/gcc.mak	Tue Sep  6 18:38:04 2005
***************
*** 5,12 ****
  #
  # compiler
  #
! CC = gcc
! CXX = c++
  
  #
  # Basename for libraries
--- 5,12 ----
  #
  # compiler
  #
! CC *= gcc
! CXX *= c++
  
  #
  # Basename for libraries
***************
*** 19,25 ****
  #
  LINK=ar cr
  # 2.95 flag
! DYN_LINK=gcc -shared -o
  
  OBJEXT=o
  DYNEXT=so
--- 19,25 ----
  #
  LINK=ar cr
  # 2.95 flag
! DYN_LINK=$(CC) -shared -o
  
  OBJEXT=o
  DYNEXT=so
*** misc/STLport-4.0/src/sunpro.mak	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/src/sunpro.mak	Tue Sep  6 18:38:04 2005
***************
*** 30,35 ****
--- 30,40 ----
  
  include common_macros.mak
  
+ # override because STLDEBUG breaks...
+ ALL_STATIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_LIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_LIB)
+ 
+ ALL_DYNAMIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_DYNLIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_DYNLIB)
+ 
  CXXFLAGS_COMMON = -mt -pta +w2 -features=rtti -xildoff ${STL_INCL} -D__SGI_STL_OWN_IOSTREAMS
  
  SHCXXFLAGS = -PIC
***************
*** 70,75 ****
--- 75,88 ----
  LDFLAGS_STLDEBUG_static = ${CXXFLAGS_STLDEBUG_static}
  LDFLAGS_STLDEBUG_dynamic = ${CXXFLAGS_STLDEBUG_dynamic}
  
+ LDLIBS_RELEASE_dynamic = -lm
+ LDLIBS_DEBUG_dynamic = -lm
+ LDLIBS_STLDEBUG_dynamic = -lm
+ 
+ LDFLAGS_RELEASE_dynamic += -norunpath
+ LDFLAGS_DEBUG_dynamic += -norunpath
+ LDFLAGS_STLDEBUG_dynamic += -norunpath
+ 
  include common_percent_rules.mak
  include common_rules.mak
  
*** misc/STLport-4.0/src/sunpro11.mak	Mon Dec  5 17:22:32 2005
--- misc/build/STLport-4.0/src/sunpro11.mak	Mon Dec  5 17:25:03 2005
***************
*** 1 ****
! dummy
--- 1,82 ----
!  #
!  # Basename for libraries
!  #
!  LIB_BASENAME = libstlport_sunpro
!  
!  STL_INCL= -I. -I${PWD}/../stlport/SC5 -I${SYSBASE}/usr/include
!  # STL_INCL= -I. -I${PWD}/../stlport
!  
!  CC = CC
!  CXX = CC
!  
!  #
!  # guts for common stuff
!  #
!  #
!  LINK=$(CC) -mt -xar -o
!  DYN_LINK=$(CC) -mt -G -o
!  
!  OBJEXT=o
!  DYNEXT=so
!  STEXT=a
!  RM=rm -rf
!  PATH_SEP=/
!  MKDIR=mkdir -p
!  COMP=SUN
!  
!  # LINK_OUT=-xar -o  
!  # DYNLINK_OUT=-o 
!  
!  all: all_static all_dynamic
!  
!  include common_macros.mak
! 
! # override because STLDEBUG breaks...
! ALL_STATIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_LIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_LIB)
! 
! ALL_DYNAMIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_DYNLIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_DYNLIB)
!  
!  CXXFLAGS_COMMON = -mt -library=%none,Crun ${STL_INCL} -D__SGI_STL_OWN_IOSTREAMS
!  
!  SHCXXFLAGS = -KPIC
!  
!  #
!  # Try those flags to see if they help to get maximum efficiency :
!  # -Qoption iropt -R,-Ml30,-Ms30,-Mi1000000,-Mm1000000,-Mr1000000,-Ma1000000,-Mc1000000,-Mt1000000
!  # Note, these flags don't work anymore with the SunStudio 11 compiler. Let the compiler
!  # decide how to optimize
!  RELEASE_FLAGS = -O3
!  
!  
!  # install: $(TARGETS)
!  #	cp -p $(TARGETS) ${INSTALLDIR}
!  
!  CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) ${RELEASE_FLAGS}
!  CXXFLAGS_RELEASE_dynamic = $(CXXFLAGS_COMMON) ${RELEASE_FLAGS} $(SHCXXFLAGS)
!  
!  CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -g
!  CXXFLAGS_DEBUG_dynamic = $(CXXFLAGS_COMMON) -g $(SHCXXFLAGS)
!  
!  CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_COMMON) -g -D__STL_DEBUG
!  CXXFLAGS_STLDEBUG_dynamic = $(CXXFLAGS_COMMON) -g -D__STL_DEBUG $(SHCXXFLAGS)
!  
!  LDFLAGS_RELEASE_static = ${CXXFLAGS_RELEASE_static}
!  LDFLAGS_RELEASE_dynamic = ${CXXFLAGS_RELEASE_dynamic}
!  
!  LDFLAGS_DEBUG_static = ${CXXFLAGS_DEBUG_static}
!  LDFLAGS_DEBUG_dynamic = ${CXXFLAGS_DEBUG_dynamic}
!  
!  LDFLAGS_STLDEBUG_static = ${CXXFLAGS_STLDEBUG_static}
!  LDFLAGS_STLDEBUG_dynamic = ${CXXFLAGS_STLDEBUG_dynamic}
!  
!  LDLIBS_RELEASE_dynamic = -lm
!  LDLIBS_DEBUG_dynamic = -lm
!  LDLIBS_STLDEBUG_dynamic = -lm
! 
!  LDFLAGS_RELEASE_dynamic += -norunpath
!  LDFLAGS_DEBUG_dynamic += -norunpath
!  LDFLAGS_STLDEBUG_dynamic += -norunpath
! 
!  include common_percent_rules.mak
!  include common_rules.mak
!  
*** misc/STLport-4.0/src/sunpro6.mak	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/src/sunpro6.mak	Tue Sep  6 18:38:04 2005
***************
*** 3,10 ****
   #
   LIB_BASENAME = libstlport_sunpro
   
!  # STL_INCL= -I. -I${PWD}/../stlport/SC5
!  STL_INCL= -I. -I${PWD}/../stlport
   
   CC = CC
   CXX = CC
--- 3,10 ----
   #
   LIB_BASENAME = libstlport_sunpro
   
!  STL_INCL= -I. -I${PWD}/../stlport/SC5
!  # STL_INCL= -I. -I${PWD}/../stlport
   
   CC = CC
   CXX = CC
***************
*** 30,35 ****
--- 30,40 ----
   all: all_static all_dynamic
   
   include common_macros.mak
+ 
+ # override because STLDEBUG breaks...
+ ALL_STATIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_LIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_LIB)
+ 
+ ALL_DYNAMIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_DYNLIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_DYNLIB)
   
   CXXFLAGS_COMMON = -mt -library=%none,Crun -template=wholeclass ${STL_INCL} -D__SGI_STL_OWN_IOSTREAMS
   
***************
*** 62,67 ****
--- 67,80 ----
   LDFLAGS_STLDEBUG_static = ${CXXFLAGS_STLDEBUG_static}
   LDFLAGS_STLDEBUG_dynamic = ${CXXFLAGS_STLDEBUG_dynamic}
   
+  LDLIBS_RELEASE_dynamic = -lm
+  LDLIBS_DEBUG_dynamic = -lm
+  LDLIBS_STLDEBUG_dynamic = -lm
+ 
+  LDFLAGS_RELEASE_dynamic += -norunpath
+  LDFLAGS_DEBUG_dynamic += -norunpath
+  LDFLAGS_STLDEBUG_dynamic += -norunpath
+ 
   include common_percent_rules.mak
   include common_rules.mak
   
*** misc/STLport-4.0/src/sunpro8.mak	Tue Sep  6 19:11:15 2005
--- misc/build/STLport-4.0/src/sunpro8.mak	Tue Sep  6 19:10:31 2005
***************
*** 1 ****
! dummy
--- 1,80 ----
!  #
!  # Basename for libraries
!  #
!  LIB_BASENAME = libstlport_sunpro
!  
!  STL_INCL= -I. -I${PWD}/../stlport/SC5 -I${SYSBASE}/usr/include
!  # STL_INCL= -I. -I${PWD}/../stlport
!  
!  CC = CC
!  CXX = CC
!  
!  #
!  # guts for common stuff
!  #
!  #
!  LINK=$(CC) -mt -xar -o
!  DYN_LINK=$(CC) -mt -G -o
!  
!  OBJEXT=o
!  DYNEXT=so
!  STEXT=a
!  RM=rm -rf
!  PATH_SEP=/
!  MKDIR=mkdir -p
!  COMP=SUN
!  
!  # LINK_OUT=-xar -o  
!  # DYNLINK_OUT=-o 
!  
!  all: all_static all_dynamic
!  
!  include common_macros.mak
! 
! # override because STLDEBUG breaks...
! ALL_STATIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_LIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_LIB)
! 
! ALL_DYNAMIC_LIBS=$(OUTDIR)$(PATH_SEP)$(RELEASE_DYNLIB) $(OUTDIR)$(PATH_SEP)$(DEBUG_DYNLIB)
!  
!  CXXFLAGS_COMMON = -DSYSBASE="$(SYSBASE)" -mt -library=%none,Crun ${STL_INCL} -D__SGI_STL_OWN_IOSTREAMS
!  
!  SHCXXFLAGS = -KPIC
!  
!  #
!  # Try those flags to see if they help to get maximum efficiency :
!  # -Qoption iropt -R,-Ml30,-Ms30,-Mi1000000,-Mm1000000,-Mr1000000,-Ma1000000,-Mc1000000,-Mt1000000
!  RELEASE_FLAGS = -O2 -Qoption iropt -R,-Ml30,-Ms30,-Mi1000000,-Mm1000000,-Mr1000000,-Ma1000000,-Mc1000000,-Mt1000000
!  
!  
!  # install: $(TARGETS)
!  #	cp -p $(TARGETS) ${INSTALLDIR}
!  
!  CXXFLAGS_RELEASE_static = $(CXXFLAGS_COMMON) ${RELEASE_FLAGS}
!  CXXFLAGS_RELEASE_dynamic = $(CXXFLAGS_COMMON) ${RELEASE_FLAGS} $(SHCXXFLAGS)
!  
!  CXXFLAGS_DEBUG_static = $(CXXFLAGS_COMMON) -g
!  CXXFLAGS_DEBUG_dynamic = $(CXXFLAGS_COMMON) -g $(SHCXXFLAGS)
!  
!  CXXFLAGS_STLDEBUG_static = $(CXXFLAGS_COMMON) -g -D__STL_DEBUG
!  CXXFLAGS_STLDEBUG_dynamic = $(CXXFLAGS_COMMON) -g -D__STL_DEBUG $(SHCXXFLAGS)
!  
!  LDFLAGS_RELEASE_static = ${CXXFLAGS_RELEASE_static}
!  LDFLAGS_RELEASE_dynamic = ${CXXFLAGS_RELEASE_dynamic} -L$(SYSBASE)/usr/lib
!  
!  LDFLAGS_DEBUG_static = ${CXXFLAGS_DEBUG_static}
!  LDFLAGS_DEBUG_dynamic = ${CXXFLAGS_DEBUG_dynamic} -L$(SYSBASE)/usr/lib
!  
!  LDFLAGS_STLDEBUG_static = ${CXXFLAGS_STLDEBUG_static}
!  LDFLAGS_STLDEBUG_dynamic = ${CXXFLAGS_STLDEBUG_dynamic} -L$(SYSBASE)/usr/lib
!  
!  LDLIBS_RELEASE_dynamic = -lm
!  LDLIBS_DEBUG_dynamic = -lm
!  LDLIBS_STLDEBUG_dynamic = -lm
! 
!  LDFLAGS_RELEASE_dynamic += -norunpath
!  LDFLAGS_DEBUG_dynamic += -norunpath
!  LDFLAGS_STLDEBUG_dynamic += -norunpath
! 
!  include common_percent_rules.mak
!  include common_rules.mak
!  
*** misc/STLport-4.0/src/vc6.mak	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/src/vc6.mak	Tue Sep  6 18:38:04 2005
***************
*** 8,14 ****
  LIB_BASENAME=stlport_vc6
  COMP=VC6
  
! EXTRA_COMMON_FLAGS=/D "_MBCS"
  
  all: platform all_static all_dynamic 
  
--- 8,14 ----
  LIB_BASENAME=stlport_vc6
  COMP=VC6
  
! EXTRA_COMMON_FLAGS=/D "_MBCS" /D "_NTSDK"
  
  all: platform all_static all_dynamic 
  
*** misc/STLport-4.0/stlport/SC5/config/stl_sunpro.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/SC5/config/stl_sunpro.h	Wed Oct 10 16:11:29 2007
***************
*** 42,53 ****
  
  #  define __STL_NO_QUALIFIED_FRIENDS 1
  
- // <locale> constructor problem
- #  define __STL_NO_MEMBER_TEMPLATES 1
- #  define __STL_NO_MEMBER_TEMPLATE_KEYWORD 1
- #  define __STL_NO_MEMBER_TEMPLATE_CLASSES 1
- #  define __STL_NO_FRIEND_TEMPLATES 1
- 
  // ambiguity problems
  #  define __STL_NO_CLASS_PARTIAL_SPECIALIZATION 1
  #  define __STL_NO_FUNCTION_TMPL_PARTIAL_ORDER 1
--- 42,47 ----
***************
*** 55,62 ****
  # endif
  
  
  # if (__SUNPRO_CC < 0x600)
- #  define __STL_NO_TYPENAME_ON_RETURN_TYPE 1 
  #  define __STL_HAS_NO_NEW_C_HEADERS 1 
  #  define __STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS
  #  define __STL_NON_TYPE_TMPL_PARAM_BUG 1
--- 49,63 ----
  # endif
  
  
+ # if (__SUNPRO_CC < 0x530)
+ // <locale> constructor problem
+ #  define __STL_NO_MEMBER_TEMPLATES 1
+ #  define __STL_NO_MEMBER_TEMPLATE_KEYWORD 1
+ #  define __STL_NO_MEMBER_TEMPLATE_CLASSES 1
+ #  define __STL_NO_FRIEND_TEMPLATES 1
+ #endif
+ 
  # if (__SUNPRO_CC < 0x600)
  #  define __STL_HAS_NO_NEW_C_HEADERS 1 
  #  define __STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS
  #  define __STL_NON_TYPE_TMPL_PARAM_BUG 1
***************
*** 63,68 ****
--- 64,73 ----
  #  define __STL_NONTEMPL_BASE_MATCH_BUG 1
  # endif
  
+ # if (__SUNPRO_CC < 0x510)
+ #  define __STL_NO_TYPENAME_ON_RETURN_TYPE 1 
+ # endif
+ 
  // Features that depend on compatibility switch
  # if ( __SUNPRO_CC < 0x500 ) || (defined (__SUNPRO_CC_COMPAT) && (__SUNPRO_CC_COMPAT < 5))
  #  define __STL_HAS_NO_NEW_IOSTREAMS 1
***************
*** 73,84 ****
  #  define __STL_NO_BAD_ALLOC 1
  #  define __STL_NO_EXCEPTION_HEADER 1
  #  define __STL_NATIVE_C_INCLUDE_PATH ../include
! # elif (__SUNPRO_CC < 0x600)  
  #  define __STL_NATIVE_C_HEADER(header) <../CC/##header##.SUNWCCh>
  #  define __STL_NATIVE_CPP_C_HEADER(header) <../CC/##header##.SUNWCCh>
  # else
! #  define __STL_NATIVE_C_INCLUDE_PATH ../CC/std
! #  define __STL_NATIVE_CPP_C_INCLUDE_PATH ../CC/std
  # endif
  
  #  if ( __SUNPRO_CC < 0x500 )
--- 78,94 ----
  #  define __STL_NO_BAD_ALLOC 1
  #  define __STL_NO_EXCEPTION_HEADER 1
  #  define __STL_NATIVE_C_INCLUDE_PATH ../include
! # elif (__SUNPRO_CC < 0x520)  
  #  define __STL_NATIVE_C_HEADER(header) <../CC/##header##.SUNWCCh>
  #  define __STL_NATIVE_CPP_C_HEADER(header) <../CC/##header##.SUNWCCh>
  # else
! #  if defined SYSBASE
! #   define __STL_NATIVE_C_INCLUDE_PATH SYSBASE/usr/include
! #   define __STL_NATIVE_CPP_C_INCLUDE_PATH SYSBASE/usr/include
! #  else
! #   define __STL_NATIVE_C_INCLUDE_PATH /usr/include
! #   define __STL_NATIVE_CPP_C_INCLUDE_PATH /usr/include
! #  endif
  # endif
  
  #  if ( __SUNPRO_CC < 0x500 )
*** misc/STLport-4.0/stlport/cctype	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cctype	Thu Aug 25 15:54:53 2005
***************
*** 48,53 ****
--- 48,56 ----
  
  # if ! defined (__STL_NO_CSTD_FUNCTION_IMPORTS)
  #  if defined ( __STL_IMPORT_VENDOR_CSTD )
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::isalnum;
  using __STL_VENDOR_CSTD::isalpha;
***************
*** 63,68 ****
--- 66,74 ----
  using __STL_VENDOR_CSTD::tolower;
  using __STL_VENDOR_CSTD::toupper;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #   endif /* __STL_IMPORT_VENDOR_CSTD*/
  #  endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  
*** misc/STLport-4.0/stlport/cerrno	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cerrno	Thu Aug 25 15:54:53 2005
***************
*** 30,38 ****
--- 30,44 ----
  #ifndef errno
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::errno;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_IMPORT_VENDOR_CSTD */
  
  #endif
*** misc/STLport-4.0/stlport/clocale	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/clocale	Thu Aug 25 15:54:53 2005
***************
*** 28,33 ****
--- 28,36 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::lconv;
  #  if ! defined (__STL_NO_CSTD_FUNCTION_IMPORTS)
***************
*** 35,40 ****
--- 38,46 ----
  using __STL_VENDOR_CSTD::setlocale;
  #  endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID ==  0x108 )
*** misc/STLport-4.0/stlport/cmath	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cmath	Thu Aug 25 15:54:53 2005
***************
*** 40,45 ****
--- 40,48 ----
  #  endif
  
  #  ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # if ! defined (__STL_NO_CSTD_FUNCTION_IMPORTS)
  using __STL_VENDOR_CSTD::acos;
***************
*** 66,73 ****
--- 69,82 ----
  using __STL_VENDOR_CSTD::tanh;
  # endif /* BUG */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_IMPORT_VENDOR_CSTD */
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_SAME_FUNCTION_NAME_RESOLUTION_BUG
***************
*** 135,140 ****
--- 144,152 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if (__STL_OUTERMOST_HEADER_ID ==  0x109 )
  #  include <stl/_epilog.h>
*** misc/STLport-4.0/stlport/csetjmp	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/csetjmp	Thu Aug 25 15:54:54 2005
***************
*** 31,36 ****
--- 31,39 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::jmp_buf;
  # ifndef __STL_NO_CSTD_FUNCTION_IMPORTS
***************
*** 40,45 ****
--- 43,51 ----
  using __STL_VENDOR_CSTD::longjmp;
  # endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x111 )
*** misc/STLport-4.0/stlport/csignal	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/csignal	Thu Aug 25 15:54:54 2005
***************
*** 28,33 ****
--- 28,36 ----
  # endif
  
  #  ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # ifndef __STL_NO_CSTD_FUNCTION_IMPORTS
  using __STL_VENDOR_CSTD::signal;
***************
*** 35,40 ****
--- 38,46 ----
  # endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  using __STL_VENDOR_CSTD::sig_atomic_t;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x112 )
*** misc/STLport-4.0/stlport/cstdarg	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cstdarg	Thu Aug 25 15:54:54 2005
***************
*** 28,36 ****
--- 28,42 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::va_list;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x113 )
*** misc/STLport-4.0/stlport/cstddef	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cstddef	Thu Aug 25 15:54:54 2005
***************
*** 30,39 ****
--- 30,45 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE  
  using __STL_VENDOR_CSTD::ptrdiff_t;
  using __STL_VENDOR_CSTD::size_t;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x114 )
*** misc/STLport-4.0/stlport/cstdio	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cstdio	Thu Aug 25 15:54:54 2005
***************
*** 47,52 ****
--- 47,55 ----
  #  endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD 
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::FILE;
  using __STL_VENDOR_CSTD::fpos_t;
***************
*** 108,113 ****
--- 111,119 ----
  #   endif
  #  endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 15)
*** misc/STLport-4.0/stlport/cstdlib	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cstdlib	Thu Aug 25 15:54:54 2005
***************
*** 42,47 ****
--- 42,50 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD 
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::div_t;
  using __STL_VENDOR_CSTD::ldiv_t;
***************
*** 83,88 ****
--- 86,94 ----
  using __STL_VENDOR_CSTD::srand;
  #  endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x116)
*** misc/STLport-4.0/stlport/cstring	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cstring	Thu Aug 25 15:54:54 2005
***************
*** 28,36 ****
--- 28,42 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/cstring>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x117)
*** misc/STLport-4.0/stlport/ctime	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/ctime	Thu Aug 25 15:54:54 2005
***************
*** 28,33 ****
--- 28,36 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::size_t;
  using __STL_VENDOR_CSTD::clock_t;
***************
*** 45,50 ****
--- 48,56 ----
  using __STL_VENDOR_CSTD::time;
  #  endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x118)
*** misc/STLport-4.0/stlport/cwchar	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cwchar	Thu Aug 25 15:54:54 2005
***************
*** 79,84 ****
--- 79,87 ----
  
  # ifdef __STL_USE_OWN_MBSTATE_T
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  struct __stl_mbstate_t { 
***************
*** 109,114 ****
--- 112,120 ----
  typedef __stl_mbstate_t mbstate_t;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif
  
***************
*** 119,124 ****
--- 125,133 ----
  
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::wint_t;
  using __STL_VENDOR_CSTD::size_t;
***************
*** 230,235 ****
--- 239,247 ----
  
  # endif /* __STL_NO_NATIVE_WIDE_FUNCTIONS */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # undef __STL_WCHAR_SUNPRO_EXCLUDE
*** misc/STLport-4.0/stlport/cwctype	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/cwctype	Thu Aug 25 15:54:54 2005
***************
*** 39,44 ****
--- 39,47 ----
  # endif
  
  # ifdef __STL_IMPORT_VENDOR_CSTD
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_VENDOR_CSTD::wctype_t;
  using __STL_VENDOR_CSTD::wint_t;
***************
*** 67,72 ****
--- 70,78 ----
  using __STL_VENDOR_CSTD::towupper;
  #  endif /* __STL_NO_CSTD_FUNCTION_IMPORTS */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_IMPORT_VENDOR_CSTD */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x121)
*** misc/STLport-4.0/stlport/exception	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/exception	Thu Aug 25 15:54:54 2005
***************
*** 60,65 ****
--- 60,68 ----
  
  #  ifdef __STL_USE_OWN_NAMESPACE
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  using __STL_VENDOR_EXCEPT_STD::exception;
***************
*** 90,95 ****
--- 93,101 ----
  #  endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  endif /* __STL_OWN_NAMESPACE */
  
***************
*** 98,103 ****
--- 104,112 ----
  # ifndef __SGI_STL_EXCEPTION_H
  #  define __SGI_STL_EXCEPTION_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // section 18.6
***************
*** 140,152 ****
--- 149,170 ----
  # define __STL_EXCEPTION_BASE exception
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_NO_EXCEPTION_HEADER */
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  // forward declaration
  class __Named_exception;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __SGI_STL_EXCEPTION_H */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x423)
*** misc/STLport-4.0/stlport/iomanip	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/iomanip	Thu Aug 25 15:54:54 2005
***************
*** 32,37 ****
--- 32,40 ----
  
  #  include <istream>              // Includes <ostream> and <ios>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 177,182 ****
--- 180,188 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # elif !defined (__STL_USE_NO_IOSTREAMS)
  #  include <wrap_std/iomanip>
*** misc/STLport-4.0/stlport/iomanip.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/iomanip.h	Thu Aug 25 15:54:54 2005
***************
*** 43,51 ****
--- 43,57 ----
  # include __STL_NATIVE_OLD_STREAMS_HEADER(iomanip.h)
  
  # if defined  (__STL_USE_NAMESPACES) && ! defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # include <using/h/iomanip.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_USE_NAMESPACES */
  
  # endif
*** misc/STLport-4.0/stlport/ios.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/ios.h	Thu Aug 25 15:54:54 2005
***************
*** 33,41 ****
--- 33,47 ----
  
  # include __STL_NATIVE_OLD_STREAMS_HEADER(ios.h)
  # if defined (__STL_USE_NAMESPACES) && !defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_OLD_IO_NAMESPACE::ios;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_USE_OWN_NAMESPACE */
  
  # endif
*** misc/STLport-4.0/stlport/iosfwd	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/iosfwd	Thu Aug 25 15:54:54 2005
***************
*** 38,46 ****
--- 38,52 ----
  
  # else
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  template <class _Tp> class allocator;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  include <wrap_std/iosfwd>
  
*** misc/STLport-4.0/stlport/iostream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/iostream	Thu Aug 25 15:54:54 2005
***************
*** 34,39 ****
--- 34,42 ----
  #include <istream>
  #include <ostream>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Note: cin and wcin are both associated with stdio.  The C standard
***************
*** 62,67 ****
--- 65,73 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # elif defined ( __STL_USE_NO_IOSTREAMS )
  #  include <stl/_null_stream.h>
*** misc/STLport-4.0/stlport/istream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/istream.h	Thu Aug 25 15:54:54 2005
***************
*** 46,54 ****
--- 46,60 ----
  # include __STL_NATIVE_OLD_STREAMS_HEADER(istream.h)
  
  # if defined (__STL_USE_NAMESPACES) && !defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using __STL_OLD_IO_NAMESPACE::istream;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_USE_OWN_NAMESPACE */
  
  # endif /* __SGI_STL_OWN_IOSTREAMS */
*** misc/STLport-4.0/stlport/locale	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/locale	Thu Aug 25 15:54:54 2005
***************
*** 59,64 ****
--- 59,67 ----
  #undef toupper
  #undef tolower
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT> 
***************
*** 133,138 ****
--- 136,144 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # elif !defined (__STL_USE_NO_IOSTREAMS)
  #  include <wrap_std/locale> 
*** misc/STLport-4.0/stlport/math.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/math.h	Thu Aug 25 15:55:17 2005
***************
*** 24,30 ****
--- 24,36 ----
  #  define exception __math_exception
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  # include __STL_NATIVE_C_HEADER(math.h)
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if defined (__STL_HAS_NO_NAMESPACES)
  #  undef exception
*** misc/STLport-4.0/stlport/memory	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/memory	Thu Aug 25 15:54:55 2005
***************
*** 51,56 ****
--- 51,59 ----
  
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  // implementation primitive
  class __ptr_base {
***************
*** 188,193 ****
--- 191,199 ----
  	
  };
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x46)
  #  include <stl/_epilog.h>
*** misc/STLport-4.0/stlport/memory.new	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/memory.new	Thu Aug 25 15:54:55 2005
***************
*** 58,63 ****
--- 58,66 ----
  
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // implementation primitive
***************
*** 223,228 ****
--- 226,234 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_MEMORY */
  
*** misc/STLport-4.0/stlport/new	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/new	Thu Aug 25 15:54:55 2005
***************
*** 58,63 ****
--- 58,66 ----
  
  # ifndef __STL_NO_BAD_ALLOC
  #  ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
      __STL_BEGIN_NAMESPACE
      using __STL_VENDOR_EXCEPT_STD::bad_alloc;
      using __STL_VENDOR_EXCEPT_STD::nothrow_t;
***************
*** 72,77 ****
--- 75,83 ----
  #  endif
      
      __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  endif /* __STL_OWN_NAMESPACE */
  # else /* __STL_NO_BAD_ALLOC */
***************
*** 78,83 ****
--- 84,92 ----
  
  #  include <exception>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class nothrow_t {};
***************
*** 98,106 ****
--- 107,121 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_NO_BAD_ALLOC */
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  inline void*  __STL_CALL __stl_new(size_t __n) {
  #if (( defined(__IBMCPP__)|| defined(__OS400__) || defined (__xlC__) || defined (qTidyHeap)) && defined(__DEBUG_ALLOC__) )
***************
*** 118,123 ****
--- 133,141 ----
  #endif
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* WINCE */
  
*** misc/STLport-4.0/stlport/ostream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/ostream.h	Thu Aug 25 15:54:56 2005
***************
*** 33,41 ****
--- 33,47 ----
  
  #  include __STL_NATIVE_OLD_STREAMS_HEADER(ostream.h)
  #  if defined (__STL_USE_NAMESPACES) && !defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #   include <using/h/ostream.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_USE_NAMESPACES */
  
  # endif /* __STL_USE_NO_IOSTREAMS */
*** misc/STLport-4.0/stlport/pthread_alloc	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/pthread_alloc	Thu Aug 25 15:54:56 2005
***************
*** 51,56 ****
--- 51,59 ----
  #  define __RESTRICT
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #define __STL_DATA_ALIGNMENT 8
***************
*** 516,521 ****
--- 519,527 ----
  #endif /* __STL_MEMBER_TEMPLATE_CLASSES */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x52)
  #  include <stl/_epilog.h>
*** misc/STLport-4.0/stlport/stdexcept	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stdexcept	Thu Aug 25 15:54:56 2005
***************
*** 45,50 ****
--- 45,53 ----
  # include <stl/_string_fwd.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class __STL_CLASS_DECLSPEC __Named_exception : public __STL_EXCEPTION_BASE {
***************
*** 106,111 ****
--- 109,117 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* Not o32, and no exceptions */
  # endif /* __STL_STDEXCEPT_SEEN */
*** misc/STLport-4.0/stlport/typeinfo	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/typeinfo	Thu Aug 25 15:55:00 2005
***************
*** 35,40 ****
--- 35,43 ----
  
  # if defined  (__STL_USE_NAMESPACES) \
     && ( defined (__STL_VENDOR_GLOBAL_EXCEPT_STD) || defined (__STL_USE_OWN_NAMESPACE) || defined (__STL_DEBUG))
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // VC++ 6 has only this guy in ::
***************
*** 48,61 ****
--- 51,73 ----
  
  using __STL_VENDOR_EXCEPT_STD::bad_cast;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  
  #else
  
  # include <exception>
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  struct bad_cast : exception {};
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif  /* NO_TYPEINFO */
  
  # if (__STL_OUTERMOST_HEADER_ID == 0x473)
*** misc/STLport-4.0/stlport/typeinfo.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/typeinfo.h	Thu Aug 25 15:55:00 2005
***************
*** 31,36 ****
--- 31,39 ----
  
  # if defined  (__STL_USE_OWN_NAMESPACE)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  using /* __STL_VENDOR_EXCEPT_STD */ ::type_info;
***************
*** 38,43 ****
--- 41,49 ----
  using /* __STL_VENDOR_EXCEPT_STD */ ::bad_cast;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_OWN_NAMESPACE */
  
*** misc/STLport-4.0/stlport/old_hp/alloc.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/old_hp/alloc.h	Thu Aug 25 15:54:55 2005
***************
*** 49,54 ****
--- 49,57 ----
  #endif
  
  // Old SGI names
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  typedef __sgi_alloc alloc;
***************
*** 62,67 ****
--- 65,73 ----
  typedef __multithreaded_alloc  multithreaded_alloc; 
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #ifdef __STL_USE_NAMESPACES
  # ifdef __STL_BROKEN_USING_DIRECTIVE
*** misc/STLport-4.0/stlport/old_hp/iterator.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/old_hp/iterator.h	Thu Aug 25 15:54:55 2005
***************
*** 82,87 ****
--- 82,90 ----
  
  # if 0 // defined (__STL_USE_OWN_NAMESPACE) && defined (__STL_IMPORT_VENDOR_STD) && !defined (__STL_BROKEN_USING_DIRECTIVE)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  using __STL_VENDOR_STD::istream_iterator;
***************
*** 88,93 ****
--- 91,99 ----
  using __STL_VENDOR_STD::ostream_iterator;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif
  
*** misc/STLport-4.0/stlport/stl/_algo.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_algo.c	Thu Aug 25 15:54:57 2005
***************
*** 26,31 ****
--- 26,34 ----
  #ifndef __STL_ALGO_C
  # define __STL_ALGO_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _BidirectionalIter, class _Distance>
***************
*** 2663,2668 ****
--- 2666,2674 ----
  # endif /* __STL_NO_EXTENSIONS */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __stl_threshold
  
*** misc/STLport-4.0/stlport/stl/_algo.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_algo.h	Thu Aug 25 15:54:57 2005
***************
*** 51,56 ****
--- 51,59 ----
  #  include <cstdio>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // for_each.  Apply a function to every element of a range.
***************
*** 1039,1044 ****
--- 1042,1050 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_algo.c>
*** misc/STLport-4.0/stlport/stl/_algobase.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_algobase.c	Thu Aug 25 15:54:57 2005
***************
*** 25,30 ****
--- 25,33 ----
  #ifndef __SGI_STL_ALGOBASE_C
  #define __SGI_STL_ALGOBASE_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _InputIter1, class _InputIter2>
***************
*** 89,94 ****
--- 92,100 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_ALGOBASE_C */
  
*** misc/STLport-4.0/stlport/stl/_algobase.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_algobase.h	Thu Aug 25 15:54:57 2005
***************
*** 67,72 ****
--- 67,75 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  // swap and iter_swap
  template <class _Tp>
***************
*** 679,684 ****
--- 682,690 ----
                                   _InputIter2 __first2, _InputIter2 __last2);
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_algobase.c>
*** misc/STLport-4.0/stlport/stl/_alloc.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_alloc.c	Thu Aug 25 15:54:57 2005
***************
*** 40,45 ****
--- 40,48 ----
  
  #define _S_FREELIST_INDEX(__bytes) ((__bytes-size_t(1))>>(int)_ALIGN_SHIFT)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <int __inst>
***************
*** 355,360 ****
--- 358,366 ----
  #  endif /* __STL_STATIC_TEMPLATE_DATA */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef _S_FREELIST_INDEX
  
*** misc/STLport-4.0/stlport/stl/_alloc.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_alloc.h	Thu Aug 25 15:54:57 2005
***************
*** 115,120 ****
--- 115,123 ----
  // conformance.
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp, class _Alloc>
***************
*** 893,898 ****
--- 896,904 ----
  # endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_alloc.c>
*** misc/STLport-4.0/stlport/stl/_bitset.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_bitset.c	Thu Aug 25 15:54:57 2005
***************
*** 26,31 ****
--- 26,34 ----
  #  define bitset __bitset
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //
***************
*** 396,401 ****
--- 399,407 ----
  }; // end _First_one
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __BITS_PER_WORD
  #  undef __BITSET_WORDS
*** misc/STLport-4.0/stlport/stl/_bitset.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_bitset.h	Thu Aug 25 15:54:57 2005
***************
*** 67,72 ****
--- 67,75 ----
  #define __BITS_PER_WORD (CHAR_BIT*sizeof(unsigned long))
  #define __BITSET_WORDS(__n) ((__n) < 1 ? 1 : ((__n) + __BITS_PER_WORD - 1)/__BITS_PER_WORD)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // structure to aid in counting bits
***************
*** 753,758 ****
--- 756,764 ----
  #  undef  bitset
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __BITS_PER_WORD
  #  undef __BITSET_WORDS
*** misc/STLport-4.0/stlport/stl/_bvector.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_bvector.h	Thu Aug 25 15:54:57 2005
***************
*** 44,49 ****
--- 44,52 ----
  # include <stl/_range_errors.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE 
  
  struct _Bit_reference {
***************
*** 72,77 ****
--- 75,83 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if defined (__SGI_STL_NO_ARROW_OPERATOR) && ! defined (__STL_NO_PROXY_ARROW_OPERATOR)
  
***************
*** 87,92 ****
--- 93,101 ----
  
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  inline void swap(_Bit_reference __x, _Bit_reference __y)
***************
*** 827,832 ****
--- 836,844 ----
  #endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #undef _Alloc
  #undef __SGI_STL_VECBOOL_TEMPLATE
*** misc/STLport-4.0/stlport/stl/_codecvt.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_codecvt.h	Thu Aug 25 15:54:57 2005
***************
*** 26,31 ****
--- 26,34 ----
  #include <stl/c_locale.h>
  #include <stl/_locale.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class __STL_CLASS_DECLSPEC codecvt_base {
***************
*** 295,300 ****
--- 298,306 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_CODECVT_H */
  
*** misc/STLport-4.0/stlport/stl/_collate.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_collate.h	Thu Aug 25 15:54:57 2005
***************
*** 26,31 ****
--- 26,34 ----
  #include <stl/_string_fwd.h>
  #include <stl/_locale.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 154,159 ****
--- 157,165 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_COLLATE_H */
  
*** misc/STLport-4.0/stlport/stl/_complex.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_complex.c	Thu Aug 25 15:54:57 2005
***************
*** 18,23 ****
--- 18,26 ----
  #ifndef __STL_COMPLEX_C
  #define __STL_COMPLEX_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Non-inline member functions.
***************
*** 154,158 ****
--- 157,164 ----
  #endif /* __STL_USE_NEW_IOSTREAMS */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_COMPLEX_C */
*** misc/STLport-4.0/stlport/stl/_complex.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_complex.h	Thu Aug 25 15:54:57 2005
***************
*** 52,57 ****
--- 52,60 ----
  #include <istream>
  #include <sstream>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #if !defined(__STL_NO_COMPLEX_SPECIALIZATIONS)		//*TY 02/25/2000 - added for MPW compiler workaround
***************
*** 656,661 ****
--- 659,667 ----
  # endif /* SPECIALIZATIONS */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  #if defined (__sgi) && !defined(__GNUC__)
***************
*** 721,726 ****
--- 727,735 ----
  # define __STL_HYPOT    __STL_DO_HYPOT(double)
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Unary non-member arithmetic operators.
***************
*** 1051,1056 ****
--- 1060,1068 ----
  __STL_DECLSPEC complex<long double> __STL_CALL tanh(const complex<long double>&);
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  # ifndef __STL_LINK_TIME_INSTANTIATION
*** misc/STLport-4.0/stlport/stl/_config.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_config.h	Thu Aug 25 15:55:22 2005
***************
*** 540,547 ****
--- 540,553 ----
  
  #  define  __STL_USING_NAMESPACE(x) using namespace x ;
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  namespace std { }
  namespace __std_alias = std;
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  /* assume std:: namespace for C++ std library if not being told otherwise */
  #  ifdef __STL_VENDOR_GLOBAL_STD
*** misc/STLport-4.0/stlport/stl/_construct.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_construct.h	Thu Aug 25 15:54:57 2005
***************
*** 46,51 ****
--- 46,54 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_TRIVIAL_DESTRUCTOR_BUG
***************
*** 159,164 ****
--- 162,170 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */
  
*** misc/STLport-4.0/stlport/stl/_ctraits_fns.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ctraits_fns.h	Thu Aug 25 15:54:57 2005
***************
*** 25,30 ****
--- 25,33 ----
  // This file contains a few small adapters that allow a character
  // traits class to be used as a function object.
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Traits>
***************
*** 61,66 ****
--- 64,72 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_CTRAITS_FUNCTIONS_H */
  
*** misc/STLport-4.0/stlport/stl/_ctype.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ctype.h	Thu Aug 25 15:54:57 2005
***************
*** 28,33 ****
--- 28,36 ----
  #  include <stl/_algobase.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class __STL_CLASS_DECLSPEC ctype_base {
***************
*** 264,269 ****
--- 267,275 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_CTYPE_H */
  
*** misc/STLport-4.0/stlport/stl/_deque.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_deque.c	Thu Aug 25 15:54:57 2005
***************
*** 26,31 ****
--- 26,34 ----
  #ifndef __STL_DEQUE_C
  #define __STL_DEQUE_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Non-inline member functions from _Deque_base.
***************
*** 778,783 ****
--- 781,789 ----
  # endif /* __STL_MEMBER_TEMPLATES */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __iterator__
  # undef iterator
*** misc/STLport-4.0/stlport/stl/_deque.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_deque.h	Thu Aug 25 15:54:57 2005
***************
*** 96,101 ****
--- 96,104 ----
  # undef deque
  # define deque __WORKAROUND_DBG_RENAME(deque)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined ( __STL_USE_ABBREVS )
***************
*** 1058,1063 ****
--- 1061,1069 ----
  # endif
  
  __STL_END_NAMESPACE 
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // do a cleanup
  # undef deque
*** misc/STLport-4.0/stlport/stl/_fstream.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_fstream.c	Thu Aug 25 15:54:57 2005
***************
*** 20,25 ****
--- 20,28 ----
  
  # if defined (__STL_DESIGNATED_DLL) || ! defined (__STL_NO_CUSTOM_IO)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined ( __STL_NESTED_TYPE_PARAM_BUG )
***************
*** 732,737 ****
--- 735,743 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __BF_int_type__
  # undef __BF_pos_type__
*** misc/STLport-4.0/stlport/stl/_fstream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_fstream.h	Thu Aug 25 15:54:57 2005
***************
*** 61,66 ****
--- 61,69 ----
  #endif
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 644,654 ****
--- 647,663 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_fstream.c>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined (__STL_USE_TEMPLATE_EXPORT)
***************
*** 663,668 ****
--- 672,680 ----
  # endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_FSTREAM */
  
*** misc/STLport-4.0/stlport/stl/_function.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_function.h	Thu Aug 25 15:54:57 2005
***************
*** 30,35 ****
--- 30,38 ----
  #ifndef __SGI_STL_INTERNAL_FUNCTION_H
  #define __SGI_STL_INTERNAL_FUNCTION_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Arg, class _Result>
***************
*** 805,810 ****
--- 808,816 ----
  # endif /* __STL_MEMBER_POINTER_PARAM_BUG */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_FUNCTION_H */
  
*** misc/STLport-4.0/stlport/stl/_hash_fun.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_hash_fun.h	Thu Aug 25 15:54:58 2005
***************
*** 35,40 ****
--- 35,43 ----
  #  include <cstddef>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Key> struct hash { };
***************
*** 99,104 ****
--- 102,110 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_HASH_FUN_H */
  
*** misc/STLport-4.0/stlport/stl/_hash_map.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_hash_map.h	Thu Aug 25 15:54:58 2005
***************
*** 30,35 ****
--- 30,38 ----
  #ifndef __SGI_STL_INTERNAL_HASH_MAP_H
  #define __SGI_STL_INTERNAL_HASH_MAP_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # define  hash_map      __WORKAROUND_RENAME(hash_map)
***************
*** 489,494 ****
--- 492,500 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if defined (__STL_USE_WRAPPER_FOR_ALLOC_PARAM) 
  #  include <stl/wrappers/_hash_map.h>
*** misc/STLport-4.0/stlport/stl/_hash_set.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_hash_set.h	Thu Aug 25 15:54:58 2005
***************
*** 33,38 ****
--- 33,41 ----
  # define  hash_set      __WORKAROUND_RENAME(hash_set)
  # define  hash_multiset __WORKAROUND_RENAME(hash_multiset)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Value, __DFL_TMPL_PARAM(_HashFcn,hash<_Value>),
***************
*** 468,473 ****
--- 471,479 ----
  
  #endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // do a cleanup
  #  undef hash_set
*** misc/STLport-4.0/stlport/stl/_hashtable.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_hashtable.c	Thu Aug 25 15:54:58 2005
***************
*** 30,35 ****
--- 30,38 ----
  #  define hashtable __WORKAROUND_DBG_RENAME(hashtable)
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # define __PRIME_LIST_BODY { \
***************
*** 441,446 ****
--- 444,452 ----
  # undef hashtable
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_HASHTABLE_C */
  
*** misc/STLport-4.0/stlport/stl/_hashtable.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_hashtable.h	Thu Aug 25 15:54:58 2005
***************
*** 57,62 ****
--- 57,65 ----
  #  define hashtable __WORKAROUND_DBG_RENAME(hashtable)
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined ( __STL_USE_ABBREVS )
***************
*** 606,611 ****
--- 609,617 ----
  #endif /* __STL_USE_SEPARATE_RELOPS_NAMESPACE */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __stl_prime_list
  # undef hashtable
*** misc/STLport-4.0/stlport/stl/_heap.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_heap.c	Thu Aug 25 15:54:58 2005
***************
*** 30,35 ****
--- 30,38 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _RandomAccessIterator, class _Distance, class _Tp>
***************
*** 234,239 ****
--- 237,245 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_HEAP_C */
  
*** misc/STLport-4.0/stlport/stl/_heap.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_heap.h	Thu Aug 25 15:54:58 2005
***************
*** 34,39 ****
--- 34,42 ----
  #include <stl/_config.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap.
***************
*** 117,122 ****
--- 120,128 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_heap.c>
*** misc/STLport-4.0/stlport/stl/_ios.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ios.c	Thu Aug 25 15:54:58 2005
***************
*** 20,25 ****
--- 20,28 ----
  
  # include <stl/_streambuf.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // basic_ios<>'s non-inline member functions
***************
*** 107,111 ****
--- 110,117 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_IOS_C */
*** misc/STLport-4.0/stlport/stl/_ios.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ios.h	Thu Aug 25 15:54:58 2005
***************
*** 26,31 ****
--- 26,34 ----
  #include <stl/_locale.h>
  #include <stl/_ctype.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // ----------------------------------------------------------------------
***************
*** 171,176 ****
--- 174,182 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_ios.c>
*** misc/STLport-4.0/stlport/stl/_ios_base.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ios_base.h	Thu Aug 25 15:54:58 2005
***************
*** 24,29 ****
--- 24,32 ----
  #include <iosfwd>
  #include <stl/_locale.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // ----------------------------------------------------------------------
***************
*** 365,370 ****
--- 368,376 ----
    { __s.setf(ios_base::scientific, ios_base::floatfield); return __s; }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_IOS_BASE */
  
*** misc/STLport-4.0/stlport/stl/_iosfwd.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_iosfwd.h	Thu Aug 25 15:54:58 2005
***************
*** 28,33 ****
--- 28,36 ----
  #endif /* __unix */
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp> class allocator;
***************
*** 110,118 ****
--- 113,127 ----
  typedef fpos<mbstate_t> wstreampos;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #include <stl/char_traits.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class __STL_CLASS_DECLSPEC ios_base;
***************
*** 245,250 ****
--- 254,262 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif
  
*** misc/STLport-4.0/stlport/stl/_istream.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_istream.c	Thu Aug 25 15:54:58 2005
***************
*** 32,37 ****
--- 32,40 ----
  # define __BIS_off_type__ __STL_TYPENAME_ON_RETURN_TYPE basic_istream<_CharT, _Traits>::off_type
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 1269,1274 ****
--- 1272,1280 ----
  {}
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __BIS_int_type__
  # undef __BIS_pos_type__
*** misc/STLport-4.0/stlport/stl/_istream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_istream.h	Thu Aug 25 15:54:58 2005
***************
*** 27,32 ****
--- 27,35 ----
  #include <stl/_ctraits_fns.h>    // Helper functions that allow char traits
                                  // to be used as function objects.
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _Traits, class _Number> 
***************
*** 470,475 ****
--- 473,481 ----
  # endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_istream.c>
*** misc/STLport-4.0/stlport/stl/_iterator.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_iterator.h	Thu Aug 25 15:54:58 2005
***************
*** 34,39 ****
--- 34,42 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined (__STL_NO_CLASS_PARTIAL_SPECIALIZATION) || ! defined (__STL_NO_ANACHRONISMS)
***************
*** 574,579 ****
--- 577,585 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_ITERATOR_H */
  
*** misc/STLport-4.0/stlport/stl/_iterator_base.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_iterator_base.h	Thu Aug 25 15:54:58 2005
***************
*** 57,62 ****
--- 57,65 ----
  #  define _Nonconst_traits _N_Tr
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  struct input_iterator_tag {};
***************
*** 143,149 ****
--- 146,158 ----
  #  define __STL_POINTERS_SPECIALIZE( _TpP )
  # else 
     __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  include <stl/_ptrs_specialize.h>
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
     __STL_BEGIN_NAMESPACE
  # endif
  
***************
*** 421,426 ****
--- 430,438 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if defined (__STL_DEBUG) && ! defined (__STLPORT_DEBUG_H)
  #  include <stl/debug/_debug.h>
*** misc/STLport-4.0/stlport/stl/_limits.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_limits.c	Thu Aug 25 15:54:58 2005
***************
*** 24,29 ****
--- 24,32 ----
  //  numeric_limits static members
  //==========================================================
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_NO_STATIC_TEMPLATE_DATA
***************
*** 362,366 ****
--- 365,372 ----
  # undef __STL_LDOUBLE_SNAN_REP
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STLPORT_LIMITS_C_INCLUDED */
*** misc/STLport-4.0/stlport/stl/_limits.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_limits.h	Thu Aug 25 15:54:58 2005
***************
*** 26,31 ****
--- 26,34 ----
  
  #define __SGI_CPP_LIMITS
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  enum float_round_style {
***************
*** 379,384 ****
--- 382,390 ----
  // We write special values (Inf and NaN) as bit patterns and 
  // cast the the appropriate floating-point types. 
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_limits.c>
*** misc/STLport-4.0/stlport/stl/_list.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_list.c	Thu Aug 25 15:54:58 2005
***************
*** 34,39 ****
--- 34,42 ----
  # undef list
  # define  list  __WORKAROUND_DBG_RENAME(list)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Dummy>
***************
*** 334,339 ****
--- 337,345 ----
  # undef __iterator__
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_LIST_C */
  
*** misc/STLport-4.0/stlport/stl/_list.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_list.h	Thu Aug 25 15:54:58 2005
***************
*** 46,51 ****
--- 46,54 ----
  #  include <stl/_construct.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # undef list
***************
*** 268,274 ****
  
    reference front() { return *begin(); }
    const_reference front() const { return *begin(); }
!   reference back() { return *(--end()); }
    const_reference back() const { return *(--end()); }
  
    void swap(list<_Tp, _Alloc>& __x) {
--- 271,277 ----
  
    reference front() { return *begin(); }
    const_reference front() const { return *begin(); }
!   reference back() { iterator i(end()); --i; return *i; }
    const_reference back() const { return *(--end()); }
  
    void swap(list<_Tp, _Alloc>& __x) {
***************
*** 588,593 ****
--- 591,599 ----
  #endif /* __STL_USE_SEPARATE_RELOPS_NAMESPACE */
  
  __STL_END_NAMESPACE 
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_list.c>
*** misc/STLport-4.0/stlport/stl/_locale.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_locale.c	Thu Aug 25 15:54:58 2005
***************
*** 23,28 ****
--- 23,31 ----
  #include <stl/_string.h>
  #include <stl/_collate.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 66,70 ****
--- 69,76 ----
  # endif /* MEMBER_TEMPLATES */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif
*** misc/STLport-4.0/stlport/stl/_locale.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_locale.h	Thu Aug 25 15:54:58 2005
***************
*** 28,33 ****
--- 28,36 ----
  #include <stl/_threads.h>
  #include <stl/_string_fwd.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class __STL_CLASS_DECLSPEC _Locale_impl;             // Forward declaration of opaque type.
***************
*** 212,217 ****
--- 215,223 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # ifndef __STL_LINK_TIME_INSTANTIATION
  #  include <stl/_locale.c>
*** misc/STLport-4.0/stlport/stl/_map.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_map.h	Thu Aug 25 15:54:58 2005
***************
*** 33,38 ****
--- 33,41 ----
  #define map __WORKAROUND_RENAME(map)
  #define multimap __WORKAROUND_RENAME(multimap)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Key, class _Tp, __DFL_TMPL_PARAM(_Compare, less<_Key> ), 
***************
*** 384,389 ****
--- 387,395 ----
  # undef  __STL_TEMPLATE_HEADER
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // do a cleanup
  #  undef map
*** misc/STLport-4.0/stlport/stl/_messages_facets.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_messages_facets.h	Thu Aug 25 15:54:58 2005
***************
*** 24,29 ****
--- 24,32 ----
  #ifndef __SGI_STL_INTERNAL_MESSAGES_H
  #define __SGI_STL_INTERNAL_MESSAGES_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Forward declaration of an opaque type.
***************
*** 150,155 ****
--- 153,161 ----
  # endif /* WCHAR_T */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_MESSAGES_H */
  
*** misc/STLport-4.0/stlport/stl/_monetary.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_monetary.c	Thu Aug 25 15:54:58 2005
***************
*** 18,23 ****
--- 18,26 ----
  #ifndef __STL_MONETARY_C
  #define __STL_MONETARY_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _InputIterator>
***************
*** 557,561 ****
--- 560,567 ----
  # endif /* defined (__STL_NO_CUSTOM_IO) && ! defined (__STL_DESIGNATED_DLL) */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_MONETARY_C */
*** misc/STLport-4.0/stlport/stl/_monetary.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_monetary.h	Thu Aug 25 15:54:58 2005
***************
*** 25,30 ****
--- 25,33 ----
  
  # include <stl/_numeric_facets.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class money_base {
***************
*** 441,446 ****
--- 444,452 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_monetary.c>
*** misc/STLport-4.0/stlport/stl/_null_stream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_null_stream.h	Thu Aug 25 15:54:58 2005
***************
*** 16,21 ****
--- 16,24 ----
  #ifndef __STL_NULL_STREAM_H
  # define __STL_NULL_STREAM_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  struct __null_stream 
***************
*** 38,42 ****
--- 41,48 ----
  extern __null_stream cin, cout, cerr, endl, ws, hex, dec;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif
*** misc/STLport-4.0/stlport/stl/_numeric.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_numeric.c	Thu Aug 25 15:54:58 2005
***************
*** 34,39 ****
--- 34,42 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _InputIterator, class _OutputIterator, class _Tp>
***************
*** 181,186 ****
--- 184,192 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_NUMERIC_C */
  
*** misc/STLport-4.0/stlport/stl/_numeric.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_numeric.h	Thu Aug 25 15:54:58 2005
***************
*** 36,41 ****
--- 36,44 ----
  #  include <stl/debug/_debug.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _InputIterator, class _Tp>
***************
*** 141,146 ****
--- 144,152 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_numeric.c>
*** misc/STLport-4.0/stlport/stl/_numeric_facets.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_numeric_facets.c	Thu Aug 25 15:54:58 2005
***************
*** 21,26 ****
--- 21,29 ----
  #include  <stl/_pair.h>
  # include <stl/_stream_iterator.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 1083,1088 ****
--- 1086,1094 ----
  # endif /* __STL_NO_CUSTOM_IO */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  #endif /* __STL_NUMERIC_FACETS_C */
*** misc/STLport-4.0/stlport/stl/_numeric_facets.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_numeric_facets.h	Thu Aug 25 15:54:58 2005
***************
*** 27,32 ****
--- 27,35 ----
  # include <stl/_locale.h>
  # include <stl/_string.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 524,529 ****
--- 527,535 ----
  # endif /* CUSTOM_IO */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # ifndef __STL_LINK_TIME_INSTANTIATION
  #  include <stl/_numeric_facets.c>
*** misc/STLport-4.0/stlport/stl/_ostream.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ostream.c	Thu Aug 25 15:54:58 2005
***************
*** 20,25 ****
--- 20,28 ----
  
  #include <stl/_numeric_facets.h> // For num_put<>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 346,351 ****
--- 349,357 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  #endif /* __STL_OSTREAM_C */
*** misc/STLport-4.0/stlport/stl/_ostream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ostream.h	Thu Aug 25 15:54:58 2005
***************
*** 24,29 ****
--- 24,32 ----
  #include <limits>               // Needed for class numeric_limits<>.
  #include <streambuf>            // For basic_streambuf.
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _Traits, class _Number> 
***************
*** 309,314 ****
--- 312,320 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __STL_MANIP_INLINE
  
*** misc/STLport-4.0/stlport/stl/_pair.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_pair.h	Thu Aug 25 15:54:58 2005
***************
*** 32,37 ****
--- 32,40 ----
  #define __SGI_STL_INTERNAL_PAIR_H
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _T1, class _T2>
***************
*** 127,132 ****
--- 130,138 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_PAIR_H */
  
*** misc/STLport-4.0/stlport/stl/_ptrs_specialize.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_ptrs_specialize.h	Thu Aug 25 15:54:58 2005
***************
*** 107,112 ****
--- 107,115 ----
  __STL_ITERATOR_TRAITS_SPECIALIZE(_Type**, _Type**) \
  __STL_ITERATOR_TRAITS_SPECIALIZE(_Type** const, _Type** const) \
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif
  
  # define __STL_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) \
*** misc/STLport-4.0/stlport/stl/_queue.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_queue.h	Thu Aug 25 15:54:58 2005
***************
*** 46,51 ****
--- 46,54 ----
  # include <stl/_function.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if ! defined ( __STL_LIMITED_DEFAULT_TEMPLATES )
***************
*** 197,202 ****
--- 200,208 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __STL_QUEUE_ARGS
  #  undef __STL_QUEUE_HEADER_ARGS
*** misc/STLport-4.0/stlport/stl/_range_errors.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_range_errors.h	Thu Aug 25 15:54:59 2005
***************
*** 37,47 ****
--- 37,53 ----
  
  #if defined (__STL_EXTERN_RANGE_ERRORS)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  void  __STL_DECLSPEC __STL_CALL __stl_throw_range_error(const char* __msg);
  void  __STL_DECLSPEC __STL_CALL __stl_throw_out_of_range(const char* __msg);
  void  __STL_DECLSPEC __STL_CALL __stl_throw_length_error(const char* __msg);
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // For other compilers where we're throwing range errors, include the
  // stdexcept header and throw the appropriate exceptions directly.
***************
*** 55,60 ****
--- 61,69 ----
  #  include <string>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  inline void __STL_DECLSPEC __STL_CALL __stl_throw_range_error(const char* __msg) { 
***************
*** 70,75 ****
--- 79,87 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // Otherwise, define inline functions that do nothing.
  #else 
***************
*** 76,81 ****
--- 88,96 ----
  
  # include <cstdlib>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  inline void __STL_DECLSPEC __STL_CALL __stl_throw_range_error(const char*) { abort(); }
***************
*** 82,87 ****
--- 97,105 ----
  inline void __STL_DECLSPEC __STL_CALL __stl_throw_length_error(const char*) { abort();}
  inline void __STL_DECLSPEC __STL_CALL __stl_throw_out_of_range(const char*) { abort(); }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif
  
*** misc/STLport-4.0/stlport/stl/_raw_storage_iter.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_raw_storage_iter.h	Thu Aug 25 15:54:59 2005
***************
*** 30,35 ****
--- 30,38 ----
  #ifndef __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H
  #define __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _ForwardIterator, class _Tp>
***************
*** 70,75 ****
--- 73,81 ----
  inline output_iterator_tag __ITERATOR_CATEGORY(const raw_storage_iterator<_ForwardIterator, _Tp>&) { return output_iterator_tag(); }
  #endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H */
  
*** misc/STLport-4.0/stlport/stl/_rope.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_rope.c	Thu Aug 25 15:54:59 2005
***************
*** 37,42 ****
--- 37,45 ----
  
  # include <stl/_range_errors.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if defined ( __STL_NESTED_TYPE_PARAM_BUG )
***************
*** 1529,1534 ****
--- 1532,1540 ----
  #   undef size_type
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* ROPEIMPL_H */
  
  // Local Variables:
*** misc/STLport-4.0/stlport/stl/_rope.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_rope.h	Thu Aug 25 15:54:59 2005
***************
*** 75,80 ****
--- 75,83 ----
  #    include <mutex.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 2491,2496 ****
--- 2494,2502 ----
    }
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_rope.c>
*** misc/STLport-4.0/stlport/stl/_set.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_set.h	Thu Aug 25 15:54:59 2005
***************
*** 37,42 ****
--- 37,45 ----
  #define set __WORKAROUND_RENAME(set)
  #define multiset __WORKAROUND_RENAME(multiset)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Key, __DFL_TMPL_PARAM(_Compare,less<_Key>), 
***************
*** 341,346 ****
--- 344,352 ----
  # undef  __STL_TEMPLATE_HEADER
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // do a cleanup
  # undef set
*** misc/STLport-4.0/stlport/stl/_slist.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_slist.c	Thu Aug 25 15:54:59 2005
***************
*** 25,30 ****
--- 25,33 ----
  #  define size_type          size_t
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp, class _Alloc> 
***************
*** 255,260 ****
--- 258,266 ----
  # undef size_type
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_SLIST_C */
  
*** misc/STLport-4.0/stlport/stl/_slist.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_slist.h	Thu Aug 25 15:54:59 2005
***************
*** 55,60 ****
--- 55,63 ----
  # undef slist
  # define  slist  __WORKAROUND_DBG_RENAME(slist)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE 
  
  template <class _Tp>
***************
*** 730,735 ****
--- 733,741 ----
  #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_slist.c>
***************
*** 742,747 ****
--- 748,756 ----
  # include <stl/debug/_slist.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  // Specialization of insert_iterator so that insertions will be constant
  // time rather than linear time.
***************
*** 783,788 ****
--- 792,800 ----
  #endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  # if defined ( __STL_USE_WRAPPER_FOR_ALLOC_PARAM )
*** misc/STLport-4.0/stlport/stl/_slist_base.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_slist_base.c	Thu Aug 25 15:54:59 2005
***************
*** 26,31 ****
--- 26,34 ----
  #ifndef __STL_SLIST_BASE_C
  #define __STL_SLIST_BASE_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Dummy>
***************
*** 92,97 ****
--- 95,103 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_SLIST_BASE_C */
  
*** misc/STLport-4.0/stlport/stl/_slist_base.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_slist_base.h	Thu Aug 25 15:54:59 2005
***************
*** 31,36 ****
--- 31,39 ----
  #include <cstddef>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE 
  
  struct _Slist_node_base
***************
*** 71,76 ****
--- 74,82 ----
  typedef _Sl_global<bool> _Sl_global_inst;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_slist_base.c>
*** misc/STLport-4.0/stlport/stl/_sstream.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_sstream.c	Thu Aug 25 15:54:59 2005
***************
*** 29,34 ****
--- 29,37 ----
  # define __BSB_pos_type__ __STL_TYPENAME_ON_RETURN_TYPE basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 529,534 ****
--- 532,540 ----
  {}
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  # undef __BSB_int_type__
*** misc/STLport-4.0/stlport/stl/_sstream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_sstream.h	Thu Aug 25 15:54:59 2005
***************
*** 28,33 ****
--- 28,36 ----
  #include <istream>              // Includes <ostream>, <ios>, <iosfwd>
  #include <string>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 230,235 ****
--- 233,241 ----
  # endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_sstream.c>
*** misc/STLport-4.0/stlport/stl/_stack.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_stack.h	Thu Aug 25 15:54:59 2005
***************
*** 30,35 ****
--- 30,38 ----
  #ifndef __SGI_STL_INTERNAL_STACK_H
  #define __SGI_STL_INTERNAL_STACK_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if !defined ( __STL_LIMITED_DEFAULT_TEMPLATES )
***************
*** 90,95 ****
--- 93,101 ----
  __STL_RELOPS_OPERATORS(template < __STL_STACK_HEADER_ARGS >, stack< __STL_STACK_ARGS >)
      
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __STL_STACK_ARGS
  #  undef __STL_STACK_HEADER_ARGS
*** misc/STLport-4.0/stlport/stl/_stdio_file.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_stdio_file.h	Thu Aug 25 15:54:59 2005
***************
*** 71,76 ****
--- 71,79 ----
  # include <unix.h>	// get the definition of fileno
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 89,95 ****
  typedef  unsigned char* _File_ptr_type;
  #endif
  
! inline int   _FILE_fd(const FILE& __f) { return __f._file; }
  inline char* _FILE_I_begin(const FILE& __f) { return (char*) __f._base; }
  inline char* _FILE_I_next(const FILE& __f) { return (char*) __f._ptr; }  
  inline char* _FILE_I_end(const FILE& __f)
--- 92,98 ----
  typedef  unsigned char* _File_ptr_type;
  #endif
  
! inline int   _FILE_fd(const FILE& __f) { return fileno(__CONST_CAST(FILE*,&__f)); }
  inline char* _FILE_I_begin(const FILE& __f) { return (char*) __f._base; }
  inline char* _FILE_I_next(const FILE& __f) { return (char*) __f._ptr; }  
  inline char* _FILE_I_end(const FILE& __f)
***************
*** 377,382 ****
--- 380,388 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_STDIO_FILE_H */
  
*** misc/STLport-4.0/stlport/stl/_stream_iterator.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_stream_iterator.h	Thu Aug 25 15:54:59 2005
***************
*** 46,51 ****
--- 46,54 ----
  
  # include <streambuf>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // We do not read any characters until operator* is called.  The first
***************
*** 214,222 ****
--- 217,231 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  include <stl/_istream.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _Traits>
***************
*** 242,247 ****
--- 251,259 ----
  : _M_buf(__o.rdbuf()), _M_ok(__o.rdbuf()!=0) {}
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif /* SGI_OWN_IOSTREAMS */
  
***************
*** 251,256 ****
--- 263,271 ----
  
  # if defined (__STL_USE_NEW_IOSTREAMS) 
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #  ifndef __STL_LIMITED_DEFAULT_TEMPLATES
***************
*** 388,397 ****
--- 403,418 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  
  # elif ! defined(__STL_USE_NO_IOSTREAMS)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #  if defined (__STL_MINIMUM_DEFAULT_TEMPLATE_PARAMS) && ! defined (__STL_DEFAULT_TYPE_PARAM)
***************
*** 479,488 ****
--- 500,515 ----
  #endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_USE_NEW_IOSTREAMS */
  
  // form-independent definiotion of stream iterators
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template < __ISI_TMPL_HEADER_ARGUMENTS >
***************
*** 525,530 ****
--- 552,560 ----
  # endif 
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  undef __ISI_TMPL_HEADER_ARGUMENTS
  #  undef __ISI_TMPL_ARGUMENTS
*** misc/STLport-4.0/stlport/stl/_streambuf.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_streambuf.c	Thu Aug 25 15:54:59 2005
***************
*** 24,29 ****
--- 24,32 ----
  
  # if defined (__STL_DESIGNATED_DLL) || ! defined (__STL_NO_CUSTOM_IO)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  //----------------------------------------------------------------------
  // Non-inline basic_streambuf<> member functions.
***************
*** 210,215 ****
--- 213,221 ----
  # endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif /* NO_CUSTOM_IO */
  
*** misc/STLport-4.0/stlport/stl/_streambuf.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_streambuf.h	Thu Aug 25 15:54:59 2005
***************
*** 23,28 ****
--- 23,31 ----
  #include <stl/_stdio_file.h>     // Declaration of struct FILE, and of
                                  // functions to manipulate it.
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 479,484 ****
--- 482,490 ----
  # endif
  };
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_streambuf.c>
*** misc/STLport-4.0/stlport/stl/_string.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string.c	Thu Aug 25 15:54:59 2005
***************
*** 42,47 ****
--- 42,50 ----
  #  define __iterator__  __STL_TYPENAME_ON_RETURN_TYPE basic_string<_CharT,_Traits,_Alloc>::iterator
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #if defined (__STL_MEMBER_TEMPLATES) && ! defined (__STL_INLINE_MEMBER_TEMPLATES)
***************
*** 664,669 ****
--- 667,675 ----
    }
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // _string_fwd has to see clean basic_string
  # undef basic_string
***************
*** 678,683 ****
--- 684,692 ----
  
  # include <stl/_range_errors.h>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // _String_base methods
***************
*** 692,697 ****
--- 701,709 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef basic_string
  # undef __size_type__
*** misc/STLport-4.0/stlport/stl/_string.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string.h	Thu Aug 25 15:54:59 2005
***************
*** 78,83 ****
--- 78,86 ----
  // a user-defined non-POD type.  However, _CharT must still have a
  // default constructor.
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG
***************
*** 1520,1525 ****
--- 1523,1531 ----
  # undef basic_string
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # ifdef __STL_DEBUG
  #  include <stl/debug/_string.h>
*** misc/STLport-4.0/stlport/stl/_string_fwd.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string_fwd.c	Thu Aug 25 15:54:59 2005
***************
*** 26,31 ****
--- 26,34 ----
  #if !defined ( __STL_STRING_FWD_C) && ! defined (__SGI_STL_OWN_IOSTREAMS)
  #define __STL_STRING_FWD_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _Traits, class _Alloc>
***************
*** 35,40 ****
--- 38,46 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_STRING_FWD_C */
  
*** misc/STLport-4.0/stlport/stl/_string_fwd.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string_fwd.h	Thu Aug 25 15:54:59 2005
***************
*** 21,26 ****
--- 21,29 ----
  
  # include <iosfwd>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if !defined (__STL_LIMITED_DEFAULT_TEMPLATES)
***************
*** 51,56 ****
--- 54,62 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_STRING_FWD_H */
  
*** misc/STLport-4.0/stlport/stl/_string_hash.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string_hash.h	Thu Aug 25 15:54:59 2005
***************
*** 23,28 ****
--- 23,31 ----
  # include <stl/_hash_fun.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _CharT, class _Traits, class _Alloc>
***************
*** 62,66 ****
--- 65,72 ----
  #endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif
*** misc/STLport-4.0/stlport/stl/_string_io.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string_io.c	Thu Aug 25 15:54:59 2005
***************
*** 5,10 ****
--- 5,13 ----
  #  define basic_string _Nondebug_string
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #if defined (__STL_USE_NEW_IOSTREAMS)
***************
*** 322,327 ****
--- 325,333 ----
  # endif /* __STL_NEW_IOSTREAMS */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef basic_string
  
*** misc/STLport-4.0/stlport/stl/_string_io.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_string_io.h	Thu Aug 25 15:54:59 2005
***************
*** 29,34 ****
--- 29,37 ----
  # endif
  
  // I/O.  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  #if defined (__STL_USE_NEW_IOSTREAMS)
***************
*** 108,113 ****
--- 111,119 ----
  #endif /* __STL_USE_NEW_IOSTREAMS */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef basic_string
  
*** misc/STLport-4.0/stlport/stl/_strstream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_strstream.h	Thu Aug 25 15:54:59 2005
***************
*** 6,11 ****
--- 6,14 ----
  #include <istream>              // Includes <ostream>, <ios>, <iosfwd>
  #include <string>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 129,131 ****
--- 132,137 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
*** misc/STLport-4.0/stlport/stl/_tempbuf.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_tempbuf.c	Thu Aug 25 15:54:59 2005
***************
*** 26,31 ****
--- 26,34 ----
  #ifndef __STL_TEMPBUF_C
  #define __STL_TEMPBUF_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp>
***************
*** 45,50 ****
--- 48,56 ----
    return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_TEMPBUF_C */
  
*** misc/STLport-4.0/stlport/stl/_tempbuf.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_tempbuf.h	Thu Aug 25 15:54:59 2005
***************
*** 40,45 ****
--- 40,48 ----
  #  include <stl/_uninitialized.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp>
***************
*** 157,162 ****
--- 160,168 ----
  # endif /* __STL_NO_EXTENSIONS */
      
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # ifndef __STL_LINK_TIME_INSTANTIATION
  #  include <stl/_tempbuf.c>
*** misc/STLport-4.0/stlport/stl/_threads.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_threads.c	Thu Aug 25 15:54:59 2005
***************
*** 28,33 ****
--- 28,36 ----
  
  # if defined (__BUILDING_STLPORT) || ! defined (__SGI_STL_OWN_IOSTREAMS)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # if ( __STL_STATIC_TEMPLATE_DATA > 0 )
***************
*** 127,132 ****
--- 130,138 ----
  # endif /* if SGI or WIN */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif /* BUILDING_STLPORT */
  #endif /*  __STL_THREADS_C */
*** misc/STLport-4.0/stlport/stl/_threads.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_threads.h	Thu Aug 25 15:54:59 2005
***************
*** 124,129 ****
--- 124,132 ----
  #  define __STL_MUTEX_INITIALIZER
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 406,411 ****
--- 409,417 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_threads.c>
*** misc/STLport-4.0/stlport/stl/_time_facets.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_time_facets.c	Thu Aug 25 15:54:59 2005
***************
*** 18,23 ****
--- 18,26 ----
  #ifndef __STL_TIME_FACETS_C
  #define __STL_TIME_FACETS_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //----------------------------------------------------------------------
***************
*** 452,456 ****
--- 455,462 ----
  # endif /* CUSTOM_IO */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_TIME_FACETS_C */
*** misc/STLport-4.0/stlport/stl/_time_facets.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_time_facets.h	Thu Aug 25 15:54:59 2005
***************
*** 23,28 ****
--- 23,31 ----
  #ifndef __SGI_STL_INTERNAL_TIME_FACETS_H
  #define __SGI_STL_INTERNAL_TIME_FACETS_H
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  _Locale_time* __STL_CALL __acquire_time(const char* __name);
***************
*** 288,293 ****
--- 291,299 ----
  };
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_time_facets.c>
*** misc/STLport-4.0/stlport/stl/_tree.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_tree.c	Thu Aug 25 15:55:00 2005
***************
*** 42,47 ****
--- 42,50 ----
  #  define _Rb_tree __WORKAROUND_DBG_RENAME(Rb_tree)
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  inline void 
***************
*** 728,733 ****
--- 731,739 ----
    return true;
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __iterator__        
  # undef __const_iterator__  
*** misc/STLport-4.0/stlport/stl/_tree.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_tree.h	Thu Aug 25 15:55:00 2005
***************
*** 83,88 ****
--- 83,91 ----
  #  define _Rb_tree __WORKAROUND_DBG_RENAME(Rb_tree)
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  typedef bool _Rb_tree_Color_type;
***************
*** 557,562 ****
--- 560,568 ----
  #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
           
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_tree.c>
***************
*** 568,573 ****
--- 574,582 ----
  # include <stl/debug/_tree.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  // Class rb_tree is not part of the C++ standard.  It is provided for
  // compatibility with the HP STL.
***************
*** 587,592 ****
--- 596,604 ----
    ~rb_tree() {}
  };
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_TREE_H */
  
*** misc/STLport-4.0/stlport/stl/_uninitialized.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_uninitialized.h	Thu Aug 25 15:55:00 2005
***************
*** 46,51 ****
--- 46,54 ----
  #  include <stl/_algobase.h>
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // uninitialized_copy
***************
*** 324,329 ****
--- 327,335 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_UNINITIALIZED_H */
  
*** misc/STLport-4.0/stlport/stl/_valarray.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_valarray.c	Thu Aug 25 15:55:00 2005
***************
*** 26,31 ****
--- 26,34 ----
  #ifndef __STL_VALARRAY_C
  #define __STL_VALARRAY_C
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Behavior is undefined if __x and *this have different sizes
***************
*** 177,182 ****
--- 180,188 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /*  __STL_VALARRAY_C */
  
*** misc/STLport-4.0/stlport/stl/_valarray.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_valarray.h	Thu Aug 25 15:55:00 2005
***************
*** 42,47 ****
--- 42,50 ----
  #endif
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  class slice;
***************
*** 1655,1660 ****
--- 1658,1666 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_valarray.c>
*** misc/STLport-4.0/stlport/stl/_vector.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_vector.c	Thu Aug 25 15:55:00 2005
***************
*** 44,49 ****
--- 44,52 ----
  #  undef  vector
  #  define vector __WORKAROUND_DBG_RENAME(vector)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Tp, class _Alloc>
***************
*** 266,271 ****
--- 269,277 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __pointer__
  # undef __const_pointer__
*** misc/STLport-4.0/stlport/stl/_vector.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/_vector.h	Thu Aug 25 15:55:00 2005
***************
*** 53,58 ****
--- 53,61 ----
  #  undef  vector
  #  define vector __WORKAROUND_DBG_RENAME(vector)
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE 
  
  // The vector base class serves two purposes.  First, its constructor
***************
*** 562,567 ****
--- 565,573 ----
  #  define __vector__ __WORKAROUND_RENAME(vector)
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # if !defined (__STL_LINK_TIME_INSTANTIATION)
  #  include <stl/_vector.c>
*** misc/STLport-4.0/stlport/stl/c_locale.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/c_locale.h	Thu Aug 25 15:54:56 2005
***************
*** 115,120 ****
--- 115,123 ----
  struct _Locale_messages;
  
  #ifdef __cplusplus
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  extern "C" {
  #endif
***************
*** 652,657 ****
--- 655,663 ----
  # ifdef __cplusplus
  }
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif
  
  # endif /* __STL_C_LOCALE_H */
*** misc/STLport-4.0/stlport/stl/char_traits.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/char_traits.h	Thu Aug 25 15:54:56 2005
***************
*** 40,45 ****
--- 40,48 ----
  # include <stl/type_traits.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // Class __char_traits_base.
***************
*** 178,183 ****
--- 181,189 ----
  # endif
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # else /* OWN_IOSTREAMS */
  
*** misc/STLport-4.0/stlport/stl/concept_checks.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/concept_checks.h	Thu Aug 25 15:54:56 2005
***************
*** 490,498 ****
--- 490,504 ----
  
  /* Associated Type Requirements */
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  template <class _Iterator> struct iterator_traits;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  template <class _Iter> 
  struct __value_type_type_definition_requirement_violation {
*** misc/STLport-4.0/stlport/stl/type_traits.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/type_traits.h	Thu Aug 25 15:55:29 2005
***************
*** 56,61 ****
--- 56,64 ----
  */
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  struct __true_type {
  };
  
***************
*** 88,93 ****
--- 91,99 ----
     typedef __false_type    has_trivial_destructor;
     typedef __false_type    is_POD_type;
  };
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // Provide some specializations.  This is harmless for compilers that
  //  have built-in __types_traits support, and essential for compilers
*** misc/STLport-4.0/stlport/stl/debug/_debug.c	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_debug.c	Thu Aug 25 15:54:56 2005
***************
*** 56,61 ****
--- 56,64 ----
      extern  void __stl_debug_terminate(void);
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifndef __STL_STRING_LITERAL
***************
*** 101,106 ****
--- 104,112 ----
  
  # endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // abort()
  #    include <cstdlib>
***************
*** 110,115 ****
--- 116,124 ----
  #    include <cstdarg>
  #    include <cstdio>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  template <class _Dummy>
***************
*** 141,149 ****
--- 150,164 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  endif /* __STL_DEBUG_MESSAGE */
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  
***************
*** 191,201 ****
--- 206,222 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif /* __STL_ASSERTIONS */
  
  #ifdef __STL_DEBUG
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_THREADS
***************
*** 447,452 ****
--- 468,476 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __STL_DEBUG */
  
*** misc/STLport-4.0/stlport/stl/debug/_debug.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_debug.h	Thu Aug 25 15:54:56 2005
***************
*** 69,74 ****
--- 69,77 ----
  /* have to hardcode that ;() */
  # define _StlMsg_MAX 27
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // This class is unique (not inherited from exception),
***************
*** 136,141 ****
--- 139,147 ----
  typedef __stl_debug_engine<bool> __stl_debugger;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #  ifndef __STL_ASSERT
  #   define __STL_ASSERT(expr) \
***************
*** 179,184 ****
--- 185,193 ----
  # include <stl/_iterator_base.h>
  #endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //=============================================================
***************
*** 384,389 ****
--- 393,401 ----
  }
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # endif /* __STL_DEBUG */
  
*** misc/STLport-4.0/stlport/stl/debug/_deque.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_deque.h	Thu Aug 25 15:54:56 2005
***************
*** 41,46 ****
--- 41,49 ----
  
  # define __STL_DEQUE_SUPER   __WORKAROUND_DBG_RENAME(deque) <_Tp,_Alloc>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 314,319 ****
--- 317,325 ----
  #endif
  
  __STL_END_NAMESPACE 
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef _DBG_deque
  # undef __STL_DEQUE_SUPER
*** misc/STLport-4.0/stlport/stl/debug/_hashtable.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_hashtable.h	Thu Aug 25 15:54:56 2005
***************
*** 42,47 ****
--- 42,50 ----
  #  define __STL_DBG_HT_SUPER \
  __WORKAROUND_DBG_RENAME(hashtable) <_Val, _Key, _HF, _ExK, _EqK, _All>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 245,250 ****
--- 248,256 ----
  }
  #endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  undef  hashtable
  
  #endif /* __SGI_STL_INTERNAL_HASHTABLE_H */
*** misc/STLport-4.0/stlport/stl/debug/_iterator.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_iterator.h	Thu Aug 25 15:54:56 2005
***************
*** 31,36 ****
--- 31,39 ----
  #  define __STL_DBG_IDENTITY( __base ) 
  # endif
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  //============================================================
***************
*** 409,414 ****
--- 412,420 ----
  };
  # endif
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* INTERNAL_H */
  
*** misc/STLport-4.0/stlport/stl/debug/_list.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_list.h	Thu Aug 25 15:54:56 2005
***************
*** 40,45 ****
--- 40,48 ----
  #  define __STL_DBG_LIST_BASE \
  __WORKAROUND_DBG_RENAME(list) <_Tp, _Alloc>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 267,272 ****
--- 270,278 ----
  #endif /* __STL_USE_SEPARATE_RELOPS_NAMESPACE */
  
  __STL_END_NAMESPACE 
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_LIST_H */
  
*** misc/STLport-4.0/stlport/stl/debug/_slist.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_slist.h	Thu Aug 25 15:54:56 2005
***************
*** 36,41 ****
--- 36,44 ----
  
  #  define __STL_DBG_SLIST_BASE __WORKAROUND_DBG_RENAME(slist) <_Tp, _Alloc>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 423,428 ****
--- 426,434 ----
  #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_INTERNAL_DBG_SLIST_H */
  
*** misc/STLport-4.0/stlport/stl/debug/_string.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_string.h	Thu Aug 25 15:54:56 2005
***************
*** 23,28 ****
--- 23,31 ----
  
  # define __STL_DBG_STRING_BASE _Nondebug_string <_CharT, _Traits, _Alloc>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 727,732 ****
--- 730,738 ----
  
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  #endif /* __SGI_STL_DBG_STRING */
  
*** misc/STLport-4.0/stlport/stl/debug/_tree.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_tree.h	Thu Aug 25 15:54:56 2005
***************
*** 39,44 ****
--- 39,47 ----
  
  # define __STL_DBG_TREE_SUPER __WORKAROUND_DBG_RENAME(Rb_tree) <_Key, _Value, _KeyOfValue, _Compare, _Alloc>
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 288,293 ****
--- 291,299 ----
  #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
           
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef  __STL_DBG_TREE_SUPER
  
*** misc/STLport-4.0/stlport/stl/debug/_vector.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/debug/_vector.h	Thu Aug 25 15:54:56 2005
***************
*** 40,45 ****
--- 40,48 ----
  #  define __STL_DBG_VECTOR_BASE __WORKAROUND_DBG_RENAME(vector) <_Tp, _Alloc>
  
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  # ifdef __STL_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS
***************
*** 335,340 ****
--- 338,346 ----
  #  endif /* __STL_USE_TEMPLATE_EXPORT */
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  # undef __STL_DBG_VECTOR_BASE
  # undef _DBG_vector
*** misc/STLport-4.0/stlport/stl/wrappers/_deque.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/stl/wrappers/_deque.h	Thu Aug 25 15:54:57 2005
***************
*** 35,40 ****
--- 35,43 ----
  
  # define _DEQUE_SUPER   _DEQUE_SUPER_NAME<_Tp, __STL_DEFAULT_ALLOCATOR(_Tp) >
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  // provide a "default" deque adaptor
***************
*** 70,75 ****
--- 73,81 ----
  # undef _DEQUE_SUPER
  
  __STL_END_NAMESPACE  
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // Local Variables:
  // mode:C++
*** misc/STLport-4.0/stlport/wrap_std/complex	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/complex	Thu Aug 25 15:55:01 2005
***************
*** 16,21 ****
--- 16,24 ----
  # include __STL_NATIVE_HEADER(complex)
  
  # if defined (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  
  using __STL_COMPLEX_NAMESPACE::complex;
***************
*** 42,47 ****
--- 45,53 ----
  using __STL_COMPLEX_NAMESPACE::tanh;
  
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* USE_OWN_NAMESPACE */
  
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/fstream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/fstream	Thu Aug 25 15:55:01 2005
***************
*** 16,24 ****
--- 16,30 ----
  # if defined (__STL_USE_NEW_IOSTREAMS)
  # include __STL_NATIVE_HEADER(fstream)
  # if defined (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # include <using/fstream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_OWN_NAMESPACE */
  # else
  # include <wrap_std/h/fstream.h>
*** misc/STLport-4.0/stlport/wrap_std/iomanip	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/iomanip	Thu Aug 25 15:55:01 2005
***************
*** 18,26 ****
--- 18,32 ----
  #  include __STL_NATIVE_HEADER(iomanip)
  
  #  ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #   include <using/iomanip>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_OWN_NAMESPACE */
  
  # else
***************
*** 28,36 ****
--- 34,48 ----
  #  include __STL_NATIVE_HEADER(iomanip.h)
  
  # if defined  (__STL_USE_NAMESPACES) && ! defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #   include <using/h/iomanip.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_USE_OWN_NAMESPACE */
  
  # endif /* __STL_USE_NEW_IOSTREAMS */
*** misc/STLport-4.0/stlport/wrap_std/ios	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/ios	Thu Aug 25 15:55:01 2005
***************
*** 16,24 ****
--- 16,30 ----
  # if defined (__STL_USE_NEW_IOSTREAMS)
  #  include __STL_NATIVE_HEADER(ios)
  # ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/ios>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  # else
  #  include <wrap_std/h/iostream.h>
*** misc/STLport-4.0/stlport/wrap_std/iosfwd	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/iosfwd	Thu Aug 25 15:55:01 2005
***************
*** 56,64 ****
--- 56,70 ----
  
  # else 
  
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  template <class _Tp> class allocator;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  
  // use old-style iostreams
  #  include <iostream.h>
***************
*** 77,85 ****
--- 83,97 ----
  # endif
  
  # if  defined (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/iosfwd>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif 
  
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/iostream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/iostream	Thu Aug 25 15:55:01 2005
***************
*** 22,30 ****
--- 22,36 ----
  # if defined (__STL_USE_NEW_IOSTREAMS)
  #  include __STL_NATIVE_HEADER(iostream)
  #   if defined  (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #    include <using/iostream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif
  # else
  #  include <wrap_std/h/iostream.h>
*** misc/STLport-4.0/stlport/wrap_std/istream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/istream	Thu Aug 25 15:55:01 2005
***************
*** 24,32 ****
--- 24,38 ----
  # include __STL_NATIVE_HEADER(istream)
  
  # if defined  (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/istream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #  endif /* __STL_OWN_NAMESPACE */
  
  # else
***************
*** 33,42 ****
--- 39,54 ----
  
  # include __STL_NATIVE_OLD_STREAMS_HEADER(iostream.h)
  # if defined  (__STL_USE_NAMESPACES)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  using ::istream;
  // using ::ws;
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* NAMESPACES */
  
  # endif /* if defined (__STL_USE_NEW_IOSTREAMS) */
*** misc/STLport-4.0/stlport/wrap_std/locale	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/locale	Thu Aug 25 15:55:01 2005
***************
*** 20,28 ****
--- 20,34 ----
  # include __STL_NATIVE_HEADER(locale)
  
  # ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/locale>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/ostream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/ostream	Thu Aug 25 15:55:01 2005
***************
*** 24,32 ****
--- 24,38 ----
  #  include __STL_NATIVE_HEADER(ostream)
  
  #  if defined (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # include <using/ostream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #   endif /* __STL_OWN_NAMESPACE */
  
  # else
***************
*** 34,42 ****
--- 40,54 ----
  #  include __STL_NATIVE_OLD_STREAMS_HEADER(iostream.h)
  
  # if defined  (__STL_USE_NAMESPACES) && ! defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # include <using/h/ostream.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #   endif /* __STL_NAMESPACE */
  # endif /* if defined (__STL_USE_NEW_IOSTREAMS) */
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/sstream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/sstream	Thu Aug 25 15:55:01 2005
***************
*** 15,23 ****
--- 15,29 ----
  
  # include __STL_NATIVE_HEADER(sstream)
  # ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/sstream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/streambuf	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/streambuf	Thu Aug 25 15:55:01 2005
***************
*** 20,28 ****
--- 20,34 ----
  # endif
  
  # if defined (__STL_USE_OWN_NAMESPACE) && defined (__STL_USE_NEW_IOSTREAMS)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/streambuf> 
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_OWN_NAMESPACE */
  
  // Local Variables:
*** misc/STLport-4.0/stlport/wrap_std/strstream	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/strstream	Thu Aug 25 15:55:01 2005
***************
*** 16,24 ****
--- 16,30 ----
  # include __STL_NATIVE_HEADER(strstream)
  
  # ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/strstream>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  
  
*** misc/STLport-4.0/stlport/wrap_std/h/fstream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/h/fstream.h	Thu Aug 25 15:55:01 2005
***************
*** 1,7 ****
--- 1,13 ----
  # include __STL_NATIVE_OLD_STREAMS_HEADER(fstream.h)
  # if defined  (__STL_USE_NAMESPACES) && ! defined (__STL_BROKEN_USING_DIRECTIVE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/h/fstream.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_OWN_NAMESPACE */
  
*** misc/STLport-4.0/stlport/wrap_std/h/iostream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/h/iostream.h	Thu Aug 25 15:55:01 2005
***************
*** 1,7 ****
--- 1,13 ----
  # include __STL_NATIVE_OLD_STREAMS_HEADER(iostream.h)
  
  # if defined (__STL_USE_OWN_NAMESPACE)
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  # include <using/h/iostream.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  # endif /* __STL_USE_OWN_NAMESPACE */
*** misc/STLport-4.0/stlport/wrap_std/h/strstream.h	Fri Jul 14 03:53:26 2000
--- misc/build/STLport-4.0/stlport/wrap_std/h/strstream.h	Thu Aug 25 15:55:01 2005
***************
*** 20,28 ****
--- 20,34 ----
  #  endif
  
  # ifdef __STL_USE_OWN_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma disable_warn
+ #endif
  __STL_BEGIN_NAMESPACE
  #  include <using/h/strstream.h>
  __STL_END_NAMESPACE
+ #if defined __SUNPRO_CC
+ #pragma enable_warn
+ #endif
  #endif /* __STL_OWN_NAMESPACE */
  
  
