Don't use the standard containers by default.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 13 May 2011 13:30:12 +0000 (13:30 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 13 May 2011 13:30:12 +0000 (13:30 +0000)
Revert the change of wxUSE_STD_CONTAINERS to 1 by default as this introduces
more incompatibilities which risk hamper upgrading to 3.0 unnecessarily.

Update the documentation to better explain why do the non-standard container
classes exist in wxWidgets and, especially, that they shouldn't be used when
possible. Also document the differences between the normal and STL containers
build in the manual.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67735 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
configure
configure.in
docs/changes.txt
docs/doxygen/overviews/container.h
include/wx/motif/setup0.h
include/wx/msw/setup0.h
include/wx/msw/wince/setup.h
include/wx/os2/setup0.h
include/wx/osx/setup0.h
include/wx/palmos/setup0.h
include/wx/setup_inc.h
include/wx/univ/setup0.h
setup.h.in

index e372e96e0090da3ed32e09eb47d60db6a31561b6..3bc2801cd3d05ed58f03452c70088b0e3a4c3c66 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Id: configure.in 67603 2011-04-26 17:35:35Z RD .
+# From configure.in Id.
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.2.
 #
@@ -2974,7 +2974,7 @@ esac
 
 DEFAULT_wxUSE_ALL_FEATURES=yes
 
-DEFAULT_wxUSE_STD_CONTAINERS=$DEFAULT_STD_FLAG
+DEFAULT_wxUSE_STD_CONTAINERS=no
 DEFAULT_wxUSE_STD_IOSTREAM=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_STRING=$DEFAULT_STD_FLAG
 
@@ -4778,6 +4778,11 @@ fi
           { echo "$as_me:$LINENO: result: $result" >&5
 echo "${ECHO_T}$result" >&6; }
 
+if test "$wxUSE_STL" = "yes"; then
+    DEFAULT_wxUSE_STD_CONTAINERS=yes
+    DEFAULT_wxUSE_STD_IOSTREAM=yes
+    DEFAULT_wxUSE_STD_STRING=yes
+fi
 
           enablestring=
           defaultval=
@@ -17233,7 +17238,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_prog_gcc_traditional=no
 fi
-rm -f -r conftest*
+rm -f conftest*
 
 
   if test $ac_cv_prog_gcc_traditional = no; then
@@ -17250,7 +17255,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 fi
-rm -f -r conftest*
+rm -f conftest*
 
   fi
 fi
@@ -19876,7 +19881,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f -r conftest*
+rm -f conftest*
 
 fi
 
@@ -19897,7 +19902,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 else
   ac_cv_header_stdc=no
 fi
-rm -f -r conftest*
+rm -f conftest*
 
 fi
 
@@ -24702,11 +24707,13 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -24746,11 +24753,13 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #define _LARGEFILE_SOURCE 1
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -24797,7 +24806,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 ;;
 esac
-rm -f -r conftest*
+rm -f conftest*
 
 # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
 # in glibc 2.1.3, but that breaks too many other things.
@@ -31489,7 +31498,7 @@ _ACEOF
       eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
     done
     # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl dylib la dll; do
+    for ac_extension in a so sl; do
       if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
         test -f "$ac_im_libdir/libX11.$ac_extension"; then
        ac_im_usrlibdir=$ac_im_libdir; break
@@ -31642,7 +31651,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
 do
   # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl dylib la dll; do
+  for ac_extension in a so sl; do
     if test -r "$ac_dir/libX11.$ac_extension"; then
       ac_x_libraries=$ac_dir
       break 2
index f5492aaefb531ac7c5d11f4b1cf92fbd4fa14e39..cc71b77be2d20b96f34e34396d88c2c8eb89a463 100644 (file)
@@ -372,7 +372,7 @@ dnl wxUSE_ALL_FEATURES which is the only which has to be set to "yes" by
 dnl default)
 DEFAULT_wxUSE_ALL_FEATURES=yes
 
-DEFAULT_wxUSE_STD_CONTAINERS=$DEFAULT_STD_FLAG
+DEFAULT_wxUSE_STD_CONTAINERS=no
 DEFAULT_wxUSE_STD_IOSTREAM=$DEFAULT_STD_FLAG
 DEFAULT_wxUSE_STD_STRING=$DEFAULT_STD_FLAG
 
@@ -701,6 +701,11 @@ dnl ---------------------------------------------------------------------------
 
 WX_ARG_DISABLE(shared,     [  --disable-shared        create static library instead of shared], wxUSE_SHARED)
 WX_ARG_ENABLE(stl,         [  --enable-stl            use standard C++ classes for everything], wxUSE_STL)
+if test "$wxUSE_STL" = "yes"; then
+    DEFAULT_wxUSE_STD_CONTAINERS=yes
+    DEFAULT_wxUSE_STD_IOSTREAM=yes
+    DEFAULT_wxUSE_STD_STRING=yes
+fi
 WX_ARG_ENABLE(std_containers,[  --enable-std_containers use standard C++ container classes], wxUSE_STD_CONTAINERS)
 WX_ARG_ENABLE(std_iostreams, [  --enable-std_iostreams  use standard C++ stream classes], wxUSE_STD_IOSTREAM)
 WX_ARG_ENABLE(std_string,    [  --enable-std_string     use standard C++ string classes], wxUSE_STD_STRING)
index 7adc9b89308efd2b167f4a9f2aaaf5e74a388981..cdcb867af6e46d09f983666125ae7b7b6127e6e2 100644 (file)
@@ -59,43 +59,6 @@ changes:
   their overridden OnExecute() or override a more convenient OnExec() instead.
 
 
-Use of STL containers by default
---------------------------------
-
-wxWidgets uses STL containers for the implementation of wxVector, wxList,
-wxDList and wxStack by default since 2.9.2 release. While the STL-based
-versions are mostly compatible with the old ones, there are some differences:
-
- - wxList::compatibility_iterator must be used instead of wxList::Node* when
-   iterating over the list contents. The compatibility_iterator class has the
-   same semantics as a Node pointer but it is an object and not a pointer, so
-   you need to write
-
-        for ( wxWindowList::compatibility_iterator it = list.GetFirst();
-              it;
-              it = it->GetNext() )
-            ...
-
-   instead of the old
-
-        for ( wxWindowList::Node *n = list.GetFirst(); n; n = n->GetNext() )
-            ...
-
- - wxSortedArrayString and wxArrayString are separate classes now and the
-   former doesn't derive from the latter. If you need to convert a sorted array
-   to a normal one, you must copy all the elements. Alternatively, you may
-   avoid the use of wxSortedArrayString by using a normal array and calling its
-   Sort() method when needed.
-
- - WX_DEFINE_ARRAY_INT(bool) cannot be used because of the differences in
-   std::vector<bool> specialization compared with the generic std::vector<>
-   class. Please either use std::vector<bool> directly or use an integer array
-   instead.
-
-Finally notice that you may set wxUSE_STD_CONTAINERS to 0 when compiling
-wxWidgets to use the non-STL containers.
-
-
 wxODBC and contrib libraries removal
 ------------------------------------
 
index 9b0ffba857f53426fcf7eb9a0b8594dbf16b16fd..eaf176e733a763931abd6911d90b9aefe20f7dff 100644 (file)
 
 @page overview_container Container Classes
 
-Classes: wxList<T>, wxArray<T>, wxVector<T>
-
-wxWidgets uses itself several container classes including doubly-linked lists
-and dynamic arrays (i.e. arrays which expand automatically when they become
-full). For both historical and portability reasons wxWidgets does not require
-the use of STL (which provides the standard implementation of many container
-classes in C++) but it can be compiled in STL mode. Additionally, wxWidgets
-provides the new wxVector<T> class template which can be used like the std::vector
-class and is actually just a typedef to std::vector if wxWidgets is compiled
-in STL mode.
-
-wxWidgets non-template container classes don't pretend to be as powerful or full as STL
-ones, but they are quite useful and may be compiled with absolutely any C++
-compiler. They're used internally by wxWidgets, but may, of course, be used in
-your programs as well if you wish.
+Classes: wxList<T>, wxArray<T>, wxVector<T>, wxStack<T>, wxHashMap, wxHashSet
+
+@section overview_container_intro Overview
+
+For historical reasons, wxWidgets uses custom container classes internally.
+This was unfortunately unavoidable during a long time when the standard library
+wasn't widely available and can't be easily changed even now that it is for
+compatibility reasons. If you are building your own version of the library and
+don't care about compatibility nor slight (less than 5%) size penalty imposed
+by the use of STL classes, you may choose to use the "STL" build of wxWidgets
+in which these custom classes are replaced with their standard counterparts and
+only read the section @ref overview_container_std explaining how to do it.
+
+Otherwise you will need to know about the custom wxWidgets container classes
+such as wxList<T> and wxArray<T> if only to use wxWidgets functions that work
+with them, e.g. wxWindow::GetChildren(), and you should find the information
+about using these classes below useful.
+
+Notice that we recommend that you use standard classes directly in your own
+code instead of the container classes provided by wxWidgets in any case as the
+standard classes are easier to use and may also be safer because of extra
+run-time checks they may perform as well as more efficient.
+
+Finally notice that recent versions of wxWidgets also provide standard-like
+classes such as wxVector<T>, wxStack<T> or wxDList which can be used exactly
+like the std::vector<T>, std::stack<T> and std::list<T*>, respectively, and
+actually are just typedefs for the corresponding types if wxWidgets is compiled
+in STL mode. These classes could be useful if you wish to avoid the use of the
+standard library in your code for some reason.
+
+To summarize, you should use the standard container classes such as
+std::vector<T> and std::list<T> if possible and wxVector<T> or wxDList<T> if
+it isn't and only use legacy wxWidgets containers such as wxArray<T> and
+wxList<T> when you must, i.e. when you use a wxWidgets function taking or
+returning a container of such type.
+
+
+@section overview_container_legacy Legacy Classes
 
 The list classes in wxWidgets are doubly-linked lists which may either own the
 objects they contain (meaning that the list deletes the object when it is
@@ -40,10 +63,10 @@ two sorts: the "plain" arrays which store either built-in types such as "char",
 own the object pointers to which they store.
 
 For the same portability reasons, the container classes implementation in
-wxWidgets does not use templates, but is rather based on C preprocessor i.e. is
-done with the macros: WX_DECLARE_LIST() and WX_DEFINE_LIST() for the linked
-lists and WX_DECLARE_ARRAY(), WX_DECLARE_OBJARRAY() and WX_DEFINE_OBJARRAY()
-for the dynamic arrays.
+wxWidgets don't use templates, but are rather based on C preprocessor i.e. are
+implemented using the macros: WX_DECLARE_LIST() and WX_DEFINE_LIST() for the
+linked lists and WX_DECLARE_ARRAY(), WX_DECLARE_OBJARRAY() and
+WX_DEFINE_OBJARRAY() for the dynamic arrays.
 
 The "DECLARE" macro declares a new container class containing the elements of
 given type and is needed for all three types of container classes: lists,
@@ -67,5 +90,41 @@ wxArrayString. The first three store elements of corresponding types, but
 wxArrayString is somewhat special: it is an optimized version of wxArray which
 uses its knowledge about wxString reference counting schema.
 
+
+@section overview_container_std STL Build
+
+To build wxWidgets with the standard containers you need to set
+wxUSE_STD_CONTAINERS option to 1 in @c wx/msw/setup.h for wxMSW builds or
+specify @c --enable-std_containers option to configure (which is also
+implicitly enabled by @c --enable-stl option) in Unix builds.
+
+The standard container build is mostly, but not quite, compatible with the
+default one. Here are the most important differences:
+ - wxList::compatibility_iterator must be used instead of wxList::Node* when
+   iterating over the list contents. The compatibility_iterator class has the
+   same semantics as a Node pointer but it is an object and not a pointer, so
+   you need to write
+        @code
+        for ( wxWindowList::compatibility_iterator it = list.GetFirst();
+              it;
+              it = it->GetNext() )
+            ...
+        @endcode
+   instead of the old
+        @code
+        for ( wxWindowList::Node *n = list.GetFirst(); n; n = n->GetNext() )
+            ...
+        @endcode
+ - wxSortedArrayString and wxArrayString are separate classes now and the
+   former doesn't derive from the latter. If you need to convert a sorted array
+   to a normal one, you must copy all the elements. Alternatively, you may
+   avoid the use of wxSortedArrayString by using a normal array and calling its
+   Sort() method when needed.
+ - WX_DEFINE_ARRAY_INT(bool) cannot be used because of the differences in
+   std::vector<bool> specialization compared with the generic std::vector<>
+   class. Please either use std::vector<bool> directly or use an integer array
+   instead.
+
+
 */
 
index c5e3883fc7b4b294e7caba39990c60d0afb5e699..4e1a8361155dbbd7132cac8e0a3a0d4124a0c825 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 896e56b3ef28934077bbffbc63802d226206910a..04a5c132b798d4be6952b3de7eb287de1e333127 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 1bc89e2d7a269f18a57e49e145e2ad8583568e3e..ce854d68cd1fdf68246399cb106d2583428245ef 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 711a8ba78a8bf97f2acbf23386f3963b382633e5..267647d251992a86e291ece2df6e34fc147e9de9 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 4967f7bf5b1fe9b510144701431f46c6567cb814..57192429e2db8ad2d67541d61edbe951f158db9b 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 53b87abe956e8971de3c866d5177efad101616a9..96b03fa46dc3461c4abd434f5174f41c5e95c797 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 66cb3e25d89d3f8fc0a94c409cab20c1615b3990..e85a56bf4c6037efcb8384c258ce6d3f329afabd 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index fd37d88b06046834115e993ee6d3c116b13c018a..ee5870c5c98de58d391f019de3f33eee32640a80 100644 (file)
 // usually more limited) implementations are used which allows to avoid the
 // dependency on the C++ run-time library.
 //
-// Default is 1 if compiler supports it. Currently this means not one of the
-// compilers mentioned in wxUSE_STD_DEFAULT comment and also not VC6 as it
-// needs non-default options for such build to avoid getting "fatal error
-// C1076: compiler limit : internal heap limit reached; use /Zm to specify a
-// higher limit" in its own standard headers, so you need to ensure you do
-// increase the heap size before enabling this option for this compiler.
-//
-// Recommended setting: 1 unless you use a system without good implementation
-// of STL.
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+// Notice that the compilers mentioned in wxUSE_STD_DEFAULT comment above don't
+// support using standard containers and that VC6 needs non-default options for
+// such build to avoid getting "fatal error C1076: compiler limit : internal
+// heap limit reached; use /Zm to specify a higher limit" in its own standard
+// headers, so you need to ensure you do increase the heap size before enabling
+// this option for this compiler.
+//
+// Default is 0 for compatibility reasons.
+//
+// Recommended setting: 1 unless compatibility with the official wxWidgets
+// build and/or the existing code is a concern.
+#define wxUSE_STD_CONTAINERS 0
 
 // Use standard C++ streams if 1 instead of wx streams in some places. If
 // disabled, wx streams are used everywhere and wxWidgets doesn't depend on the
index 456f24fa1201214bc7fd1d2fb884e6027e2c6d0e..39a678f315b75312b7a038331f554caaed6c7572 100644 (file)
     #define wxUSE_STD_DEFAULT  0
 #endif
 
-#if defined(_MSC_VER) && _MSC_VER < 1300
-    #define wxUSE_STD_CONTAINERS 0
-#else
-    #define wxUSE_STD_CONTAINERS wxUSE_STD_DEFAULT
-#endif
+#define wxUSE_STD_CONTAINERS 0
 
 #define wxUSE_STD_IOSTREAM  wxUSE_STD_DEFAULT